拆分 - 如何在结果中获取尾随空字符串

时间:2014-08-19 17:53:09

标签: java android regex string split

我尝试使用split(";")将字符串转换为数组。 我这样做了:

String str = "ggg;123;q;w;;";
String[] strArr = str.split(";");

返回数组:

["ggg","123","q","w"]

但我想退回:

["ggg","123","q","w","",""]

字符串可以是"ggg;123;;w;;df""ggg;123;;;ds;"

我想在";"之间没有值时在数组中创建一个空元素。这有可能吗?

感谢您的帮助!

3 个答案:

答案 0 :(得分:7)

像那样使用

String[] strArr = str.split(";",-1);
System.out.println(Arrays.toString(strArr));

答案 1 :(得分:1)

如果你看一下documentation of split(String regex),你会发现(强调我的)

  

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

现在,如果你得到这两个论点split(String regex, int limit) method documentation,你会发现

  

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

因此,为了防止删除尾随空字符串而不限制结果数组的长度,您需要使用非正值作为limit,而不是

split(";")

使用

split(";", -1)

答案 2 :(得分:1)

Guava库提供了一种更具可读性的替代方案。

默认情况下,包含空字符串。

    String str = "ggg;123;q;w;;";
    List<String> split = Splitter.on(";").splitToList( str );

可以使用可读的方法名称省略空字符串:

    String str = "ggg;123;q;w;;";
    List<String> split = Splitter.on(";").omitEmptyStrings().splitToList( str );