.split()用于分割包含字符"++"的字符串。

4
假设我有以下的代码块:
String x = "Hello ++ World!";
if(x.contains(" ++ "))
    System.out.println(x.split(" ++ ")[0]);

当我执行这段代码时,为什么会输出Hello ++ World!而不是Hello
很显然与split()有关,但我想不出来。

3
split 函数接受一个正则表达式。在正则表达式的上下文中,+ 符号代表具有特殊含义的字符。 - MC Emperor
4
String.split(String) 方法将参数视为正则表达式,其中 + 具有特殊含义。请尝试使用 split(" \\+\\+ ")split(Pattern.quote(" ++ ")) 代替。 - Thomas
3个回答

8

方法String::split使用正则表达式进行分割。 你的表达式" ++ "是一个正则表达式,其中+字符具有特殊含义。从文档中可以看到:

根据给定的正则表达式来拆分此字符串。

你需要转义这些字符:

System.out.println(x.split(" \\+\\+ ")[0]);

5
像Thomas上面推荐的那样使用Pattern.quote会更好。 - jokster

0

因为 ++ 被解释为正则表达式。你需要用反斜杠进行转义。尝试这样做:

System.out.println(x.split(" \\+\\+ ")[0]);


嗯,那行不通,因为在 Java 中 \ 也是一个转义字符,所以你需要对反斜杠进行转义。 - MC Emperor
谢谢指出。我确信已经添加了2个反斜杠。 - Lorenzo Micheli

-1

Split 方法使用正则表达式作为参数,您应该转义特殊字符,如 +。尝试像这样:

    String x = "Hello ++ World!";
    if(x.contains(" ++ "))
        System.out.println(x.split("\\s\\+\\+\\s")[0]);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接