List l_operators = Arrays.asList(Pattern.compile(" (\\d+)").split(rtString.trim()));
输入字符串为"12+22+3"
我得到的输出是-- [,+,+]
列表的开头有一个匹配,不应该在那里?我真的看不到它,我可以使用一些见解。感谢。
答案 0 :(得分:2)
从技术上讲,第一个分隔符(第一个数字序列)前面有一个空字符串。如果您有一行CSV,例如abc,def,ghi
和另一个,jkl,mno
,您显然想要知道第二个字符串中的第一个值是空字符串。 因此,在大多数情况下,行为是。
对于您的特定情况,您需要手动处理它,或以某种方式优化您的正则表达式。比如这样:
Pattern p = Pattern.compile("\\d+");
Matcher m = p.matcher(rtString);
if (m.find()) {
List l_operators = Arrays.asList(p.split(rtString.substring(m.end()).trim()));
// ...
}
但理想情况下,您应该为这些类型的字符串使用解析器。例如,你不能使用正则表达式处理表达式中的括号。
答案 1 :(得分:1)
这是Java中split的行为。你只需要接受它(并处理它)或使用其他库来分割字符串。我个人试图避免从Java中分离出来。
一种替代方案的示例是从Google Guava查看Splitter。
答案 2 :(得分:0)
尝试番石榴Splitter。
Splitter.onPattern("\\d+").omitEmptyStrings().split(rtString)