我有一个字符串||81|||01||
,我想用|
符号分割字符串。
我曾经这样做过,
String str = "||81|||01||";
System.out.println(str .split("\\|").length); //printing 6 . But I am expecting 8
这段代码有什么问题?| 我怎样才能用那个字符分割这个字符串,以便得到预期的长度(8
)?
Usingsplit("\\|")
与 相同split("\\|", 0)
,其中 limit 参数0
告诉函数“省略尾随空字符串”。所以你错过了最后两个空字符串。使用两个参数版本并提供一个负数来获取所有部分(甚至是尾随的空部分):
str.split("\\|", -1)
打印:
System.out.println(Arrays.toString(str.split("\\|")));
你就会明白为什么它打印 6。
您可以尝试使用 public String[] split(String regex, int limit)做您想做的事:
limit 参数控制应用模式的次数,因此会影响结果数组的长度。
所以你应该这样做:
System.out.println(str.split("\\|", -1).length);
现在,打印数组将打印:
[, , 81, , , 01, , ]
正如你所料。
您还可以使用 string.split(Pattern.quote("|"),-1) 在特殊字符上拆分字符串。
String str = "||81|||01||";
System.out.println(str.split("\\|", 8).length);
split 的第二个参数指定最大匹配数。单参数 split 就像调用 split(str, 0) 会忽略尾随字符串。有关更多说明,请参阅两者的 javadoc。
你需要使用:
str.split("\\|", -1)
第二个参数是limit
。从javadoc:
limit 参数控制应用模式的次数,因此会影响结果数组的长度。如果限制 n 大于零,则模式将最多应用 n - 1 次,数组的长度将不大于 n,并且数组的最后一个条目将包含最后一个匹配分隔符之外的所有输入。如果 n 为非正数,则该模式将尽可能多地应用,并且数组可以具有任意长度。如果 n 为零,则该模式将被应用尽可能多的次数,数组可以有任意长度,并且尾随的空字符串将被丢弃。
str.split("\\|", -1)
会做必要的。可能重复:这里