【问题标题】:.split() a string containing the characters "++" [duplicate].split() 包含字符“++”的字符串 [重复]
【发布时间】:2019-09-22 02:30:15
【问题描述】:

假设我有这段代码:

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

为什么当我执行这段代码时,我收到了输出:

  • Hello ++ World! 而不是 Hello?

这显然与split()有关,但是,我想不通。

【问题讨论】:

  • split 接受正则表达式。 + 字符是在正则表达式上下文中具有特殊含义的字符。
  • String.split(String) 将参数视为正则表达式,其中+ 具有特殊含义。请改用split(" \\+\\+ ")split(Pattern.quote(" ++ "))

标签: java regex split


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

    因为++ 它被解释为正则表达式。您需要使用反斜杠对其进行转义。试试这个:

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

    【讨论】:

    • 好吧,那不行,因为\在Java中也是一个转义字符,所以你也需要对反斜杠进行转义。
    • 感谢您指出这一点。我确定我已经添加了 2 个反斜杠..
    【解决方案3】:

    String::split 方法使用 Regex 进行拆分。 您的表达式 " ++ " 是一个正则表达式,+ 字符具有特殊含义。来自文档:

    围绕给定正则表达式的匹配拆分此字符串。

    你必须转义这些字符:

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

    【讨论】:

    • 使用上面 Thomas 推荐的 Pattern.quote 会更好。
    猜你喜欢
    • 1970-01-01
    • 2011-08-31
    • 2022-08-07
    • 2012-11-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-12
    相关资源
    最近更新 更多