0

我有一个要拆分的字符串 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

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

4

3 回答 3

7

您需要转义“|” 因为它是正则表达式世界中的一个特殊字符。

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

为什么是 2 "\" ?

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

于 2012-06-11T23:44:00.567 回答
1

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

import static java.util.Arrays.asList;
//...
String s = "FirstName1 LastName1|FirstName2 LastName2|FirstName3 LastName4|";
List<String> items = asList(s.split("\\|"));
于 2012-06-11T23:47:12.347 回答
0

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

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

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

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

更复杂的是,\在 Java 字符和字符串文字中具有特殊含义,所以它也需要转义——用另一个\字符!这意味着,您的分隔符应该是"\\|".

于 2012-06-11T23:46:58.740 回答