java - 拆分字符串,将元素放入带有两个可能的分隔符的列表中

标签 java string split delimiter splitter

我想在两个可能的分隔符“/”或“//”上将字符串拆分为列表。但更重要的是,分隔符也应该放在同一个列表中。我无法使用 Guava 中的 Splitter 或 java.util.Scanner 执行此操作。

Scanner s = new Scanner(str);
s.useDelimiter("//|/");
while (s.hasNext()) {
    System.out.println(s.delimiter());
    System.out.println(s.next());
}

s.delimiter() 返回 //|/。我想获取 ///

你知道有其他图书馆可以做到这一点吗?

我写了一些代码,它可以工作,但不是很好的解决方案:

public static ArrayList<String> processString(String s) {
    ArrayList<String> stringList = new ArrayList<String>();
    String word = "";
    for (int i = 0; i < s.length(); i++) {
        if (s.charAt(i) == '/' && i < s.length() && s.charAt(i + 1) == '/') {
            if (!word.equals(""))
                stringList.add(word);
            stringList.add("//");
            word = "";
            i++;
        } else if (s.charAt(i) == '/') {
            if (!word.equals(""))
                stringList.add(word);
            stringList.add("/");
            word = "";
        }else{
            word = word + String.valueOf(s.charAt(i));
        }
    }
    stringList.add(word);
    return stringList;
}

On "some/string//with/slash/or//two" 返回带有 some,/, string,//, with,/, slash,/, or 的列表,//, 两个

On "/some/string//with/slash/or//two" 返回带有 /, some,/, string,//, with,/, slash,/,或者,//,两个

On "//some/string//with/slash/or//two" 返回 List with //, some,/, string,//, with,/,斜杠,/,或,//,两个

最佳答案

useDelimiter 方法有一个 signature它采用 Pattern 对象,而不是 String

你应该改用那个:

Scanner s = new Scanner(str);
s.useDelimiter(Pattern.compile("/{1,2}"));
while (s.hasNext()) {
    System.out.println(s.delimiter());
    System.out.println(s.next());
}

为了捕获定界符,您需要改变方法。

Pattern p = new Pattern("(/{0,2})([^/]+)");
Matcher m = p.matcher(str);
while(m.find()) {
   String token     = m.group(2);
   String delimiter = m.group(1); // (preceding delimiter. may be null)
   /*
    * ...
    */
}

关于java - 拆分字符串,将元素放入带有两个可能的分隔符的列表中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13126712/

相关文章:

c++ - 什么是不透明字节串?

javascript - 使用 RegExp 将整数拆分为多个部分

java - split ("\\W") 和 split ("[^\\w' ]"有什么区别

python - 如何将字符串文字转换为字符串?

java - 将字符串 "11-10-10 12:00:00"转换为 Date 对象

java - 使用新名称将 Artifact 从 Jenkins 复制到另一台服务器

java - 通过网页运行 JUnit 测试

c - 如何正确初始化一个字符串

c# - Windows Mobile 7 列表框..从字符串拆分操作中添加项目

java - Android 中带有复选框的自定义 ListView