【问题标题】:Java split function gives me a small length of result String arrayJava split 函数给了我一小段结果字符串数组
【发布时间】:2017-06-04 16:52:21
【问题描述】:

我有这个代码:

String string = "_a_b___";
String[] parts = string.split("_");

结果是可变部分只有三个元素

parts[0] = ""
parts[1] = "a" 
parts[2] = "b"

这很奇怪,因为有五个“_”字符,所以拆分后应该有六个元素,而不仅仅是三个。

我想要

parts[0] = ""
parts[1] = "a"
parts[2] = "b"
parts[3] = ""
parts[4] = "" 
parts[5] = "" 

如何做到这一点?非常感谢!

【问题讨论】:

  • 只是好奇,为什么要最后三个空字符串?
  • 因为有时我将“_a_b___”和“x_a_b_c_d_e”分开。然后我使用parts[5],在第一种情况下它抛出 ArrayIndexOutOfBoundsException。
  • 哦,当我拆分时,我会使用手头的数据。意思是,而不是使用 part[5]。我会在循环中使用 parts.length 并做相应的事情。

标签: java string split


【解决方案1】:

来自Java documentation:-

因此,结果中不包含尾随的空字符串 数组。

试试split("_",6)

【讨论】:

  • 我喜欢你的解决方案你有我的 +1 它有点不完整检查我上面的解决方案
  • 很好。!很好的发现。
  • @YCF_L:同意你的回答是完整而优雅的!
【解决方案2】:

@Zakir 的解决方案是正确的,我会添加另一个信息来完美地使用它,以获得你想要的而不是使用 split("_", 6) 你可以概括它并使用:

String[] parts = string.split("_", string.replace("(?!_)", "").length());

可以接受任何长度。

对于_a_b___,您将获得[, a, b, , , ]


编辑

或者像评论中提到的@Bill F,您也可以使用String[] parts = string.split("_", -1); 任意长度。 Java doc

【讨论】:

  • 如果我错了,请纠正我,但您也可以使用 split("_", -1) 任何长度。 JavaDocs
  • 你读得很深@BillF这是正确的你也可以使用split("_", -1)我可以在我的答案中使用它吗?
  • 感谢@BillF 提供您的新信息,我很感激 :) 您可以查看我的答案,随时进行编辑
  • 谢谢!只是想帮助:) 每天学习新东西:)
猜你喜欢
  • 1970-01-01
  • 2019-09-03
  • 1970-01-01
  • 2017-10-09
  • 2010-12-13
  • 1970-01-01
  • 1970-01-01
  • 2012-07-26
  • 1970-01-01
相关资源
最近更新 更多