【问题标题】:Blank space in array with String splitter [closed]带有字符串拆分器的数组中的空格[关闭]
【发布时间】:2016-01-03 05:47:42
【问题描述】:

我的目标是将数字与字符串分开,但在我的数组的第一个位置我得到一个空格。所以我需要帮助才能避免这种情况发生。

str1 = "Y=9x1+29x2";
String[] split2 = str2.split("[^-?.?0-9]+");

【问题讨论】:

  • (1) 您的预期输出是什么,为什么? (2) 您希望split 中的正则表达式匹配哪种子字符串?你的问题现在写的方式 - “从字符串中分离数字” - 太模糊了。我不知道你想要完成什么。
  • (3) 如果输入是"3+4-5",你希望输出是什么?
  • 对不起,如果我不清楚。实际上我希望我的输出是每个数组位置的数字,例如 split2[0]=9, split2[0]=1, split2[0]=29, split2[0]=2

标签: java arrays regex


【解决方案1】:

开头的空格是由于您输入的开头存在非数字字符。

您可以在拆分前在开始时删除所有非数字:

String linha = "Y=9x1+29x2";
String[] split = linha.replaceFirst("[^-.\\d]+", "").split("[^-.\\d]+");
for (String tok: split2)
    System.out.println(tok);

输出:

9
1
29
2

【讨论】:

  • 效果很好。唯一的问题是它还删除了负数的“-”和“。”。双人间。
  • 所以我尝试了String[] split = linha.replaceFirst("[^-?.?0-9]+", "").split("[^-?.?0-9]+");,我的工作完全符合我的预期。非常感谢您的帮助。
  • @RodrigoCosta 还是错了。如果您将? 放在方括号内,那么您仍然不了解正则表达式。
【解决方案2】:

我认为您的问题相当模糊,但看了之后,我猜您想从字符串中提取数字,其中“数字”具有以下格式:可选的减号,后跟可选小数点,后跟一位或多位数字。我怀疑您还想包含数字后跟小数点后跟更多数字的数字。

我猜这就是您想要的,因为您在正则表达式中输入了 ?。问题是在方括号内,? 并不意味着“可选”,也不意味着“零或某物之一”。这意味着一个问号。正则表达式[^-?.?0-9] 的意思是“匹配一个不是数字、句点、连字符或问号的字符”。方括号中的模式总是匹配一个字符,然后告诉它哪些字符可以(或者,如果您以^ 开头,哪些字符不可以)。这种“字符集”模式从不匹配字符序列。它一次只看一个角色。如果在模式后面加上+,它仍然一次只看一个字符;它只是反复这样做。

我认为你想要做的是获取一个代表数字的模式,然后说“寻找看起来不像那个模式的东西”,然后你尝试使用 [^...] 来做到这一点.那根本行不通。

事实上,split() 是这个工作的错误工具。 split 的目的是分解 分隔符 匹配给定模式的字符串。当您希望在数组中保留 的字符串与给定模式匹配时使用它不能很好地工作,除非该模式非常简单。我建议您创建一个Matcher 并在循环中使用find() 方法。 find() 被设置为如果您重复调用它,它可以找到字符串的所有匹配子字符串。这就是你想要完成的,所以它是正确的工具。

【讨论】:

    猜你喜欢
    • 2021-04-14
    • 2017-07-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-10
    • 2018-05-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多