【问题标题】:String, split. need help understanding字符串,拆分。需要帮助理解
【发布时间】:2010-07-13 22:51:03
【问题描述】:

案例一

String a = "         ";
String[] b = a.split(",");
System.out.println(b.length);

打印 1. 为什么?

案例 2

String a = ",,,,,,,,,,,,";
String[] b = a.split(",");
System.out.println(b.length);

打印 0。为什么?

老实说,我在这里不知所措

【问题讨论】:

    标签: java string split


    【解决方案1】:

    String.split 的文档中提到了此行为:

    此方法的工作方式就像通过使用给定表达式和零限制参数调用two-argument split method因此结果数组中不包含尾随的空字符串

    您的第一个示例应该给出一个数组,其中包含一个包含空格的字符串。包含空格的字符串不为空,因此会包含在结果中。

    您的第二个示例将给出一个包含大量空字符串的数组,但这些未包含在文档中提到的结果数组中。

    为什么 Java 设计者决定在 limit 为零时删除尾随的空字符串是个好主意——我不知道。大多数其他编程语言/平台不这样做。我认为这是一个“陷阱”——这个功能并不像大多数人期望的那样工作。

    【讨论】:

    • 请注意,如果您使用a.split(",", -1)(或任何负数),则不会删除空的尾随组件。
    • 原因是他们希望它的行为与 perl 相同。
    • 所有这些怪事都是 Guava 拥有自己的 Splitter 类的部分原因。
    【解决方案2】:

    案例 1 在 b 数组“”中有一个项目 - 你的空格

    案例 2 的空条目正在被删除

    【讨论】:

      【解决方案3】:

      在 SQL Server 2005 中 我的数据库名称:a 表名:a 列名:a(varchar(max)),b(int) 价值观

      a b

      你好|howdoudo|imfine|谢谢 1
      h|ho|ine|ths 2 holddlo|howdddoudo|imfiddne|tdhs 3

      告诉我获取表的拆分存储过程如下所示,即,当 b=1 b=2 b=3

      输出输出输出 啊啊啊 你好,Holddlo Howdoudo ho howdddoudo
      无定形 谢谢 tdhs

      【讨论】: