【问题标题】:Why String.Split(regex) in java returns array of elements of size less then what actually is present?为什么 java 中的 String.Split(regex) 返回大小小于实际存在的元素数组?
【发布时间】:2014-07-04 20:12:45
【问题描述】:

返回的元素数量少于我运行 String.split() 时的预期数量

示例:- 实际字符串为“country,12345,2,1,,1,”,因此返回的数组中应包含 8 个元素,但数组的大小为“6”

代码:-

String line1 = "country,12345,2,1,,1,,";
String data1[] = line1.split(",");      
System.out.println("Length : "+data1.length);

输出:-

Length : 6

为什么会这样?

【问题讨论】:

  • 尝试输出数组中的每个元素,看看里面有什么?
  • 您使用的是什么 Java 版本?我认为 Java 8 改变了这一点,因为它总是为我打印 8
  • @Aru 我刚刚注意到,再次查看问题,那个精确的示例代码 打印 8 (因为最后一个字段不是空的 - 后面有一个空格最后一个逗号),但它上面的“示例”没有尾随空格,使用 line1 的值,你会得到 6。
  • 学习始终阅读您正在使用的 JavaDoc!

标签: java arrays string split


【解决方案1】:

因为单参数split 方法会丢弃尾随的空字段。如果您想保留它们,请使用两个参数版本,带有一个负的 limit 参数。

String data1[] = line1.split(",", -1); 

【讨论】:

    【解决方案2】:

    感谢@伊恩·罗伯茨

    Split() 方法丢弃尾随空字段,因此不计算尾随空字段。

    为了更好地理解,请参见下面的代码 -

    案例一:

    String line1 = "country,12345,2,1,,1, ,";
    String data1[] = line1.split(",");
    System.out.println("Length : "+data1.length);
    
    Output : 7
    

    由于逗号中的倒数第二个字符是东西(但不是空的),因此拆分不会只计算最后一部分。

    案例 2:

    String line1 = "country,12345,2,1,,1,, ";
    String data1[] = line1.split(",");
    System.out.println("Length : "+data1.length);
    
    Output : 8
    

    由于逗号后的最后一个字符是某物(但不是空的),因此拆分将计算所有部分。

    【讨论】:

      【解决方案3】:

      我认为您必须更改正则表达式:

      String data1[] = line1.split("\\,");

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-12-18
        • 1970-01-01
        • 1970-01-01
        • 2020-09-21
        • 1970-01-01
        • 2019-12-15
        • 1970-01-01
        • 2014-01-19
        相关资源
        最近更新 更多