Java:拆分包含特殊字符的字符串

时间:2013-04-30 10:25:27

标签: java regex string

我有一个像||81|||01||这样的字符串,我想用|符号拆分字符串。

我这样做了,

String str = "||81|||01||";
System.out.println(str .split("\\|").length); //printing 6 . But I am expecting 8

这段代码有什么问题? |如何将该字符串与该字符分开,以便获得预期的长度(8)?;

6 个答案:

答案 0 :(得分:11)

使用split("\\|")split("\\|", 0)相同,其中limit参数0告诉函数“省略尾随空字符串”。所以你错过了最后两个空字符串。使用双参数版本并提供负数以获取所有部分(甚至尾随空部分):

str.split("\\|", -1)

答案 1 :(得分:8)

打印:

System.out.println(Arrays.toString(str.split("\\|")));

你会理解为什么要打印6。

您可以尝试使用公开String[] split(String regex, int limit)执行您想要的操作:

  

limit参数控制模式的次数   应用因此会影响结果数组的长度。

所以你应该这样做:

System.out.println(str.split("\\|", -1).length);

现在,打印数组将打印:

[, , 81, , , 01, , ]正如您所料。

答案 2 :(得分:3)

您还可以使用string.split(Pattern.quote(“|”), - 1)在特殊字符上拆分字符串。

答案 3 :(得分:1)

您需要使用:

str.split("\\|", -1)

第二个参数是limit。来自javadoc:

  

limit参数控制模式的次数   应用因此会影响结果数组的长度。如果   限制n大于零,那么模式将应用于   大多数n - 1次,数组的长度不会大于n,并且   数组的最后一个条目将包含除最后一个匹配之外的所有输入   分隔符。如果n是非正数,那么该模式将被应用为   尽可能多次,阵列可以有任何长度。如果n为零   那么模式将尽可能多地应用于数组   可以有任何长度,尾随空字符串将被丢弃。

答案 4 :(得分:1)

str.split("\\|", -1)将做必要的事情。 可能重复:Here

答案 5 :(得分:1)

String str = "||81|||01||"; System.out.println(str.split("\\|", 8).length);

split的第二个参数指定最大匹配数。单个参数拆分就像调用split(str,0)一样,它会留下尾随字符串。请参阅两者的javadoc以获得更多解释。