我的目标是将数字与字符串分开,但在我的数组的第一个位置,我得到一个空格。所以我需要帮助才能实现。
str1 = "Y=9x1+29x2";
String[] split2 = str2.split("[^-?.?0-9]+");
答案 0 :(得分: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
答案 1 :(得分:1)
我认为你的问题相当含糊,但看了之后,我猜你想要从字符串中提取数字,其中“数字”具有这种格式:可选的减号,后跟一个可选的小数点,后跟一个或多个数字。我怀疑你还想要包含数字后跟小数点后跟更多数字的数字。
我猜这是你想要的,因为你在你的正则表达式?
。问题是在方括号内,?
并不意味着“可选”,它并不意味着“零或一个东西”。这意味着一个问号。正则表达式[^-?.?0-9]
表示“匹配一个不是数字,句号,连字符或问号的字符”。方括号中的模式总是匹配一个字符,并告诉它哪些字符是正常的(或者,如果以^
开头,哪些字符不正常)。这种“字符集”模式永远不会匹配一系列字符。它一次只看一个角色。如果你将+
放在模式之后,它仍然会一次查看一个字符;它只是反复这样做。
我认为你要做的是采用代表数字的模式,然后说“寻找看起来不像那种模式的东西”,你试图用{{1 }}。这根本行不通。
事实上,[^...]
是这项工作的错误工具。 split()
的目的是分解其分隔符与给定模式匹配的字符串。当你想要在数组中保持的字符串匹配给定的模式时使用它不能很好地工作,除非模式非常简单。我建议您创建一个Matcher
并在循环中使用split
方法。设置find()
,以便在重复调用时可以找到字符串的所有匹配子字符串。这是你想要完成的,所以它是正确的工具。