java - 拆分字符串,使用两个可能的分隔符将元素放入List

我想在两个可能的分隔符“ /”或“ //”上将字符串拆分为List。但更重要的是,分度计也应放在同一列表中。我无法使用Guava或java.util.Scanner中的Splitter做到这一点。

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;
}


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

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

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

最佳答案

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)
   /*
    * ...
    */
}

本文翻译自 https://stackoverflow.com/questions/13126712/

网站遵循 CC BY-SA 4.0 协议,转载或引用请注明出处。

标签 java string split delimiter splitter


相关文章:

java - 将Maven项目转换为Netbeans项目

c - 字符数组的文字字符串初始值设定项

c++ - C ++字符串分割分割错误

javascript - 分割字符串但保留逗号

python - 计数次数

java - 如何在启动时预先初始化DBCP连接池?

java - 当主线程继续时,执行两个线程,等待另一个线程

java - Tomcat,HTTP Keep-Alive和Java的HttpsUrlConnection

c++ - 用可变目录在c ++中复制文件

php - MySQL查询PHP中的字符串问题