Jam*_*sev 12 java regex arrays string split
意图是获取当前行(包含逗号的字符串),用""(修剪空格)替换空格,最后将拆分的String元素存储到数组中.
为什么这不起作用?
String[] textLine = currentInputLine.replace("\\s", "").split(",");
Run Code Online (Sandbox Code Playgroud)
pol*_*nts 10
该String班有以下方法:
因此,我们在这里看到问题的直接原因:您在非正则表达式方法中使用正则表达式模式.而不是replace,你想使用replaceAll.
其他常见的陷阱包括:
split(".") (当表示文字句点时)matches("pattern")是一个完整的匹配!
contains("pattern"); 使用matches(".*pattern.*")替代Splitter根据您的需求,String.replaceAll并split组合可以充分地完成这项工作.然而,用于此目的的更专业的工具Splitter来自番石榴.
这是一个显示差异的示例:
public static void main(String[] args) {
String text = " one, two, , five (three sir!) ";
dump(text.replaceAll("\\s", "").split(","));
// prints "[one] [two] [] [five(threesir!)] "
dump(Splitter.on(",").trimResults().omitEmptyStrings().split(text));
// prints "[one] [two] [five (three sir!)] "
}
static void dump(String... ss) {
dump(Arrays.asList(ss));
}
static void dump(Iterable<String> ss) {
for (String s : ss) {
System.out.printf("[%s] ", s);
}
System.out.println();
}
Run Code Online (Sandbox Code Playgroud)
请注意,String.split在返回的数组的开头/中间不能省略空字符串.它只能省略尾随的空字符串.另请注意,replaceAll可能会过度"修剪"空间.您可以使正则表达式更复杂,以便它只在分隔符周围修剪,但Splitter解决方案肯定更易读,更易于使用.
番石榴也有(很多其他很棒的东西)非常方便Joiner.
System.out.println(
Joiner.on("... ").skipNulls().join("Oh", "My", null, "God")
);
// prints "Oh... My... God"
Run Code Online (Sandbox Code Playgroud)
我想你想要replaceAll而不是替换.
并replaceAll("\\s","")会删除所有空格,不只是多余的.如果这不是你想要的,你应该尝试replaceAll("\\s+","\\s")或类似的东西.