当前位置: 首页 > 面试题库 >

Java字符串拆分删除空值

叶嘉颖
2023-03-14
问题内容

我试图使用分隔符拆分值。但是我发现了令人惊讶的结果

String data = "5|6|7||8|9||";
String[] split = data.split("\\|");
System.out.println(split.length);

我期望得到8个值。[5,6,7,EMPTY,8,9,EMPTY,EMPTY] 但是我只得到6个值。

任何想法以及如何解决。无论EMPTY值在何处,它都应该位于数组中。


问题答案:

split(delimiter)默认情况下,从结果数组中删除结尾的空字符串。要关闭此机制,我们需要使用重载版本,将split(delimiter, limit)limit设置为负值,例如

String[] split = data.split("\\|", -1);

更多细节:
split(regex)内部返回该方法的结果,你可以split(regex, 0)在此方法的文档中找到(强调我的)

limit参数控制应用图案的次数,因此会影响所得数组的长度。

如果限制n是大于零,则该模式将最多n应用- 1次,数组的长度将不会大于n,并且数组的最后项将包含超出最后匹配的定界符的所有输入。

如果n是的非正则模式将被应用多次可能的,并且阵列可以具有任意长度。

如果n IS 零则模式将被应用的次数成为可能,该阵列可具有任何长度,并且拖尾空字符串将被丢弃。

例外情况:

值得一提的是,只有在拆分机制创建了这种空字符串的情况下,删除尾随的空字符串才有意义。因此,"".split(anything)因为我们不能""进一步分割,所以将得到结果[""]数组。
发生这种情况是因为此处未发生拆分,所以""尽管为空,但尾随表示原始字符串,而不是拆分过程创建的空字符串。



 类似资料:
  • 问题内容: 我试图使用分隔符拆分值。但是我发现了令人惊讶的结果 我期望得到8个值。[5,6,7,EMPTY,8,9,EMPTY,EMPTY] 但是我只得到6个值。 任何想法以及如何解决。无论EMPTY值在何处,它都应该位于数组中。 问题答案: 默认情况下,从结果数组中删除结尾的空字符串。要关闭此机制,我们需要使用重载版本,将其设置为负值,例如 更多细节: 内部返回该方法的结果,你可以在此方法的文档

  • 问题内容: 我有以下字符串迫使我的Python脚本退出: 我需要删除字符串中间的多余空格,因此我尝试使用以下拆分连接脚本: 问题答案: 您的源代码和错误不匹配,错误状态为您未定义变量。 我猜您想要的是:

  • 问题内容: 使用功能split拆分此String。这是我的代码: 当我尝试这样做时,spli只包含一个字符串。似乎Java在拆分时看不到“ ^”。有人知道如何用字母“ ^”分割此字符串吗? 编辑 解决了:P 问题答案: 这是因为需要一个正则表达式,而不是文字字符串。您必须转义,因为它在regex(字符串开头的锚点)中具有不同的含义。因此,拆分实际上是在第一个字符之前完成的,从而使您完整地返回了完整

  • 问题内容: 我使用的框架会不时返回格式错误的字符串,其中包含“空”字符。 例如,“ foobar”表示为:[,f,o,o,b,a,r] 第一个字符不是空格(’‘),因此System.out.printlin()将返回“ foobar”而不是“ foobar”。但是,String的长度是7,而不是6。显然,这使大多数String方法(等于,拆分,子字符串等)变得无用。有没有办法从字符串中删除空字符?

  • 我目前正在尝试将字符串拼接成多行字符串。正则表达式应选择前面有 13 个字符的空格。 问题在于,13个字符的计数在前一个选定的空白之后不会重置。因此,在前13个字符之后,正则表达式选择每个空白。 我使用以下正则表达式,其 13 个字符: (结尾有一个空格) 您可以在这里测试正则表达式和以下代码: 此代码的输出如下所示: 这是个测试。 应用 应在 13 个字符后的空格上以子字符串分隔此字符串 但应该

  • 问题内容: 这可能是重复的。我在Swift中找不到答案,所以我不确定。 删除定界符。如果仅用一个可能的字符分开,则很容易将其重新添加。但是当你有一套的时候呢? 还有其他分割方法吗? 问题答案: 此方法适用于,而不是s,但是它应该很容易适应: 您可以这样使用它: 或者,此版本使用for循环,并 在 定界符 后 拆分: 或者,如果你想获得最斯威夫特功能为一体的功能(,,一个协议扩展,一个邪恶的,以及选