Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/332.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 什么';我的split()及其正则表达式有什么问题?_Java_Regex_String_Split_Double - Fatal编程技术网

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