【问题标题】:Split - how to get trailing empty strings in results [duplicate]拆分 - 如何在结果中获取尾随空字符串 [重复]
【发布时间】:2014-10-12 22:26:36
【问题描述】:

我正在尝试使用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;"

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

感谢您的帮助!

【问题讨论】:

标签: java android regex string split


【解决方案1】:

这样使用

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

【讨论】:

  • +1 我在这里第一次听说。
  • 成功了!谢谢! :)
【解决方案2】:

如果您查看documentation of split(String regex),您会发现(强调我的)

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

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

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

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

split(";")

使用

split(";", -1)

【讨论】:

    【解决方案3】:

    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 );
    

    【讨论】:

      猜你喜欢
      • 2023-02-10
      • 2012-10-27
      • 1970-01-01
      • 1970-01-01
      • 2011-05-31
      • 2015-04-21
      • 2018-09-26
      • 2022-01-20
      • 1970-01-01
      相关资源
      最近更新 更多