我有一个像||81|||01||
这样的字符串,我想用|
符号拆分字符串。
我这样做了,
String str = "||81|||01||";
System.out.println(str .split("\\|").length); //printing 6 . But I am expecting 8
这段代码有什么问题? |如何将该字符串与该字符分开,以便获得预期的长度(8
)?;
答案 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以获得更多解释。