我有一个字符串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
关于我哪里出错的任何建议? 等
答案 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字符和字符串文字中具有特殊含义,因此需要使用另一个\
字符进行转义!这意味着,您的分隔符应该是"\\|"
。