当前位置: 首页 > 知识库问答 >
问题:

与String的拆分方法的混淆

端木令雪
2023-03-14

我已经通过字符串的拆分方法留档,但结果并不像预期的那样。当我们将限制参数设置为负值的字符串拆分时,它总是附加一个空值。为何要这样做呢?考虑一些案例

// Case 1
String str = "1#2#3#";
System.out.println(str.split("#").length); // Prints 3
System.out.println(str.split("#", -1).length); // Prints 4

我希望这两张照片都是3。

// Case 2
str = "";
System.out.println(str.split("#").length); // Prints 1
System.out.println(str.split("#", -1).length); // Prints 1

现在,由于没有找到匹配项,通常的split with limit方法应该打印0,但它创建了一个带有空字符串的数组。

// Case 3
str = "#";
System.out.println(str.split("#").length); // Prints 0
System.out.println(str.split("#", -1).length); // Prints 2

现在我有了一个匹配项,无限制参数的split方法可以很好地工作。它是我预期的输出,但为什么它不在本例中创建一个空数组,就像在案例2中一样?

// Case 4
str = "###";
System.out.println(str.split("#").length); // Prints 0
System.out.println(str.split("#", -1).length); // Prints 4

这里第一个分割方法是预期的,但为什么第二个给4而不是3?

// Case 5
str = "1#2#3#";
System.out.println(str.split("#", 0).length); // Prints 3
System.out.println(str.split("#", 3).length); // Prints 3
System.out.println(str.split("#", 4).length); // Prints 4

现在是最后一个正极限的例子。如果正值为

共有3个答案

艾骏
2023-03-14

从文件中

limit参数控制应用阵列的次数,因此会影响生成阵列的长度。如果限制n大于零,则模式最多应用n-1次,数组长度将不大于n,数组的最后一个条目将包含最后一个匹配分隔符之外的所有输入。如果n为非正,则图案将被应用尽可能多的次数,并且阵列可以有任何长度。如果n为零,则将尽可能多次应用该模式,数组可以有任何长度,并且将丢弃尾随的空字符串。

负的限制行为被预定义为最大化匹配,并在末尾存储任何其他内容。

督烨赫
2023-03-14

困惑的主要来源是文件中经常遗漏的部分:

...如果n为零,那么...,尾随的空字符串将被丢弃。

一旦你明白了一切都是有意义的。

戚建德
2023-03-14

来自JavaDoc的字符串

limit参数控制应用阵列的次数,因此会影响生成阵列的长度。如果限制n大于零,则模式最多应用n-1次,数组长度将不大于n,数组的最后一个条目将包含最后一个匹配分隔符之外的所有输入。如果n为非正,则图案将被应用尽可能多的次数,并且阵列可以有任何长度。如果n为零,则将尽可能多次应用该模式,数组可以有任何长度,并且将丢弃尾随的空字符串。

我的。

在负极限情况下,空匹配不会被丢弃,所以,如果我用E表示空:

1#2#3# -> 1 # 2 # 3 # E
E      -> E
#      -> E # E
###    -> E # E # E # E

在上一个示例中(具有正限制),只有当n==0时,才会丢弃空的尾随空格。

 类似资料:
  • 问题内容: 我可以通过设置为来解决此问题,但是对此我有一些疑问 当我将fetchSize设置为10或其他正整数时,它不起作用,将其设置为有效后,为什么呢? 如果我们设置负值,则它给非法值错误,但就是那么,为什么不给错误? 该表包含600万条记录,在获取100或200条记录后我关闭了该表,这需要30-35秒的时间。 减少关闭时间的解决方案。 我想在此处添加更多内容,并已使用MySQL驱动程序对其进行

  • 问题内容: 从较大的[String]和给定的子数组大小开始,将这个数组拆分为较小的数组的最佳方法是什么?(最后一个数组将小于给定的子数组大小)。 具体示例: 以最大分割大小2分割[“ 1”,“ 2”,“ 3”,“ 4”,“ 5”,“ 6”,“ 7”] 该代码将产生[[“ 1”,“ 2”],[“ 3”,“ 4”],[“ 5”,“ 6”],[“ 7”]] 显然,我可以手动进行一些操作,但是我觉得像ma

  • 本文向大家介绍C#中String与string的区别分析,包括了C#中String与string的区别分析的使用技巧和注意事项,需要的朋友参考一下 本文实例展示了C#程序设计中String与string的区别,对于C#初学者来说有很好的参考借鉴价值。具体如下: 一、区别分析: String:类,System.String string:类型,变量 两者本质上没有任何区别,都是System.Stri

  • 我在文本文件中有以下内容要导入ArrayList: 澳大利亚,2 加纳,4 中国,3 西班牙,1 我的ArrayList由来自另一个类Team的对象组成,该类具有TeamName和排名字段。我可以获取以下内容以将String和int导入团队名称,但我无法分离应该是团队排名的数字: 我猜我必须在该行的某个地方使用拆分,或者将字符串转换为整数??

  • 问题内容: 当我表演 我有两个数组分别是23和34 但是当我做了 我在数组23x34中得到了一项 那么,有什么方法可以不区分大小写地使用split方法,或者是否有其他方法可以帮助您? 问题答案: 使用正则表达式模式中

  • 但如果我用: 如果需要,我很乐意提供整个SSCE,但目前,为了让事情更简短,下面是TableModel的getValueAt()和setValueAt()方法: 数据只是Person类型的arraylist(一个具有明显变量(String)fName、(String)sName和(LocalDate)DOB的类) 任何帮助都将不胜感激!