Java Splitting Strings

时间:2012-06-11 23:40:10

标签: java string

我有一个字符串s,我想分开,所以每个部分由“|”分隔symbol成为字符串数组的元素。

我会这样做吗?

     String s = "FirstName1 LastName1|FirstName2 LastName2|FirstName3 LastName4|";
     String [] names = s.split("|");

然后我想将这些元素添加到ArrayList中。我做了以下

      for(int i = 0; i < names.length; i++)
        {
            friendsNames.add(names[i]);
        }

但是我的ArrayList如下所示。

  Element 1: F
  Element 2: I
  Element 3: R
  Element 4: S
  Element 5: T
  Element 6: 
  Element 7: N

关于我哪里出错的任何建议?       等

3 个答案:

答案 0 :(得分:7)

你需要逃避“|”因为它在正则表达式世界中是一个特殊的角色。

String [] names = s.split("\\|");

为什么2“\”?

对于正则表达式,您可以转义“|”用“\ |”。但由于“\”是Java的转义字符,因此您需要转义它以保留正则表达式的“\”。

答案 1 :(得分:1)

管道是split方法接受的正则表达式中的特殊字符。因此,您必须转义该字符,以便将其解释为分隔符char。

import static java.util.Arrays.asList;
//...
String s = "FirstName1 LastName1|FirstName2 LastName2|FirstName3 LastName4|";
List<String> items = asList(s.split("\\|"));

答案 2 :(得分:0)

如果您不打算使用分隔符表示正则表达式,请使用Pattern.quote()方法来转义它包含的任何特殊字符。

String[] items = s.split(Pattern.quote("|"));

竖线字符|表示正则表达式中的替代字符。因此,您的拆分规范意味着“拆分任何空字符串或任何空字符串”。每个角色之间都有空字符串,这就是为什么每个角色都被分开了。

特殊的正则表达式字符(如管道)可以使用\“转义”。这会将其禁用为特殊字符,并使其与输入中的|字符匹配。

为了使事情复杂化,\在Java字符和字符串文字中具有特殊含义,因此需要使用另一个\字符进行转义!这意味着,您的分隔符应该是"\\|"