我的部分应用程序遇到了这个问题。 String
行变量包含 12.2 Andrew ,我试图单独拆分它们但它不起作用并且出现NumberFormatException
错误。你能帮帮我吗?
String line = "12.2 Andrew";
String[] data = line.split("(?<=\\d)(?=[a-zA-Z])");
System.out.println(Double.valueOf.(data[0]));
答案 0 :(得分:5)
你看过你的data
变量了吗?它根本没有分裂任何东西,因为条件永远不会匹配。您正在输入一个数字之后和字母之前的输入中的位置,并且因为它之间存在空格。
尝试在中间添加一个空格,应该修复它:
String[] data = line.split("(?<=\\d) (?=[a-zA-Z])");
答案 1 :(得分:2)
如果您打印data[0]
的内容,您会发现它仍然包含12.2 Andrew
,因此您实际上没有拆分任何内容。那是因为你的正则表达式说:
拆分前面有数字的地方和后面的字母
用于
等数据123foo345bar 123 baz
实际上只能在标有|
123|foo345|bar 123 baz
^it will not split `123 baz` like
`123| baz` because after digit is space (not letter)
`123 |baz` before letter is space (not digit)
so regex can't match it
您需要的是“拆分空间,其前面有数字,后面有字母”所以请使用
String[] data = line.split("(?<=\\d)\\s+(?=[a-zA-Z])");
// ^^^^ - this represent one ore more whitespaces
答案 2 :(得分:2)
您的拆分无效,并且未拆分String
。
因此Double.parseDouble
正在解析整个输入。
尝试以下方法:
String line = "12.2 Andrew";
String[] data = line.split("(?<=\\d)(?=[a-zA-Z])");
System.out.println(Arrays.toString(data));
// System.out.println(Double.valueOf(data[0]));
// fixed
data = line.split("(?<=\\d).(?=[a-zA-Z])");
System.out.println(Arrays.toString(data));
System.out.println(Double.valueOf(data[0]));
<强>输出强>
[12.2 Andrew]
[12.2, Andrew]
12.2