Java中的字符串分割

3
我刚刚注意到一个奇怪的问题,如果我向 .split() 函数传递 | 字符,它会将字符串拆分成字符。我使用以下代码进行了测试:
String s = "Hiya there | how are you | im fine thanks";
for(String str : s.split("|")) {
    System.out.println(str);
}

它把它分成了单独的字符。我尝试过反斜杠,但没有起作用。

有人知道如何实际通过|来分割它吗?


2
尝试添加两个反斜线。我知道听起来很奇怪,但是... - John Dvorak
可能会对这篇文章感兴趣:http://hoskinator.blogspot.com/2006/11/trouble-using-pipe-with-stringsplit.html - Dan W
3个回答

9

String#split接受一个正则表达式作为参数,其中|具有特殊含义,并用于alternation

你可以使用两种方法来摆脱它:

  1. Escape |. Remember, in Java you need to use double-backslash: -

    s.split("\\|");
    
  2. Use a Character class: -

    s.split("[|]");
    
在字符类内部,任何不是 - 的字符(尤其是当它在中间出现时)都没有特殊的含义。所以,[|] 就是一个普通的 | 符号,没有其他含义。
另外,你也需要在字符类中转义 ],正如 @JanDvorak 在评论中所指出的。

请注意,在字符类中,]也需要转义。 - John Dvorak

2

| 在正则表达式中是一个元字符,为了将其视为普通字符,您需要使用反斜杠\\| 进行转义:

public static void main(String...args) throws ParseException{
        String s = "Hiya there | how are you | im fine thanks";
        for(String str : s.split("\\|")) {
            System.out.println(str);
        }
    }

0

我总是使用方括号来处理正则表达式,因为随着新的需求增加,它们往往会变得越来越复杂,而使用方括号比使用反斜杠更容易理解。

public static void main(String...args) throws ParseException{
    String s = "Hiya there | how are you | im fine thanks";
    for(String str : s.split("[|]")) {
        System.out.println(str);
    }
}

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