Java 什么';我的split()及其正则表达式有什么问题?
在我的应用程序中,我遇到了这个问题。Java 什么';我的split()及其正则表达式有什么问题?,java,regex,string,split,double,Java,Regex,String,Split,Double,在我的应用程序中,我遇到了这个问题。Stringline变量包含12.2 Andrew,我试图将它们分开,但它不起作用,并且出现了NumberFormatException错误。你们能帮我一下吗 String line = "12.2 Andrew"; String[] data = line.split("(?<=\\d)(?=[a-zA-Z])"); System.out.println(Double.valueOf.(data[0])); String line=“12.2”;
String
line变量包含12.2 Andrew,我试图将它们分开,但它不起作用,并且出现了NumberFormatException
错误。你们能帮我一下吗
String line = "12.2 Andrew";
String[] data = line.split("(?<=\\d)(?=[a-zA-Z])");
System.out.println(Double.valueOf.(data[0]));
String line=“12.2”;
String[]data=line.split((?您是否查看了数据
变量?它根本没有拆分任何内容,因为条件从不匹配。您在输入中查找一个位置,紧跟在一个数字之后,紧跟在一个字母之前,并且因为中间不存在空格
尝试在中间添加一个空格,这样就可以修复它:
String[] data = line.split("(?<=\\d) (?=[a-zA-Z])");
String[]data=line.split((?如果您打印data[0]
的内容,您会注意到它仍然包含12.2andrew
,因此您实际上没有拆分任何内容。这是因为您的正则表达式说:
在前面有数字,后面有字母的地方分开
对于像这样的数据
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((?您的拆分不起作用,并且没有拆分字符串。
因此,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]));
检查NumberFormatExceptionoh的堆栈跟踪非常感谢我刚刚了解了这些正则表达式,并从我的研究中复制了它们。不知道空间也很重要。干杯!你认为你可以看看我之前关于这个问题的问题吗?再次感谢,伙计!哦,嗨,谢谢你帮助我这里。你认为你可以看看我之前关于这个问题的问题吗?我对此很感兴趣。干杯。使用点不是最好的选择。这样你也会在f
上拆分123foo
,这会给你结果[123,oo]
@Pshemo如果还有更多的案例,我会同意你的看法,但它与提供的输入一样有效。您好,谢谢您提供的信息。我能问一下您是否可以帮助我解决之前与此问题相关的问题吗?干杯!@Scorpiorian83您链接的问题的答案似乎有效。您对他们有什么问题?我很抱歉使用Mena中的解决方案,它可以一直工作到第三行,因为它以一个字符串开始,然后是双精度的,它从那里给出了一个异常。@Scorpiorian83并展示了如何处理这种情况。
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