Java String拆分不一致

时间:2015-07-20 12:38:29

标签: java string

如果我用“|”字符分割“hello |”“| hello”,那么我会得到第一个值和第二个版本的两个值。

String[] arr1 = new String("hello|").split("\\|");
String[] arr2 = new String("|hello").split("\\|");
System.out.println("arr1 length: " + arr1.length + "\narr2 length: " + arr2.length);

打印出来:

  

arr1长度:1
  arr2长度:2

为什么会这样?

4 个答案:

答案 0 :(得分:8)

根据java docs。如果第一个字符是分隔符,split会创建一个空字符串,但如果最后一个字符(或连续字符)是分隔符,则不会创建空字符串(或空字符串)。无论您使用什么分隔符,都将获得相同的行为。

答案 1 :(得分:3)

尾随空字符串将不包含在数组中,请检查以下语句。

  

String#split   此方法的工作方式就像通过调用双参数split方法一样   给定的表达式和一个零的限制参数。 尾随空   因此,字符串不包含在结果数组中。

答案 2 :(得分:1)

String#split始终返回通过将此字符串分配给给定正则表达式的匹配项而计算出的字符串数组。

答案 3 :(得分:1)

检查答案的源代码:http://grepcode.com/file/repository.grepcode.com/java/root/jdk/openjdk/6-b14/java/util/regex/Pattern.java#Pattern.compile%28java.lang.String%29

最后一行包含答案:

int resultSize = matchList.size();
if (limit == 0)
  while (resultSize > 0 && matchList.get(resultSize-1).equals(""))
    resultSize--;
String[] result = new String[resultSize];

如果它是空的,那么结尾将不会被包括在内。