Java - 将字符串按每个字符分割

11

当我尝试用分隔符“|”拆分字符串时,它似乎每个字符都被分割。

这是导致问题的代码:

String out = myString.split("|");
4个回答

28
在正则表达式中,|是用于alternation的保留字符。你需要对其进行转义:
String out = string.split("\\|");

请注意我们使用了两个反斜杠。这是因为Java字符串中的第一个反斜杠转义了第二个反斜杠,所以传递给正则表达式引擎的字符串是\|

2
哦,谢谢!我以为只需要一个反斜杠就可以避免它,但是Android Studio告诉我这是一个非法的转义字符,所以我认为它不需要转义。谢谢! - Yharoomanner
4
澄清一下,|字符并不表示空字符串,而是表示“或”。只是这意味着问题中的正则表达式被翻译成“空字符串或空字符串”。 - yshavit
@Yharoomanner 请注意,双反斜杠代表输入字符串中的反斜杠字符。然后将其作为字符串"\ |"传递给正则表达式解析器,表示垂直条字符。 - Code-Apprentice

1

split需要一个正则表达式作为参数,其中|是一个特殊字符。你需要用反斜杠对其进行转义。但是,在Java字符串中,反斜杠也是一个特殊字符,所以你也需要对其进行转义。

myString.split("\\|")

1

我认为这个问题已经在Java字符串分割成数组中得到了回答。

总结以上链接中的答案:

String[] array = values.split("\\|",-1);

这是因为:
该方法的工作方式类似于使用给定表达式和0个限制参数调用双参数split方法。因此,尾随的空字符串不包含在生成的数组中。

0

这是对我有效的方法!

 String tivoServiceCodes = "D1FAMN,DTV|SKYSP1,DTV|MOV01,VOD";
    String[] serviceCodes = tivoServiceCodes.split("\\|");
    for(String sc : serviceCodes){
        System.out.println(sc.toString());
    }

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