我想在两个可能的分隔符“/”或“//”上将字符串拆分为列表。但更重要的是,分隔符也应该放在同一个列表中。我无法使用 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/