Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/20.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中从字符串中提取数字_Java_Regex_Numbers - Fatal编程技术网

在Java中从字符串中提取数字

在Java中从字符串中提取数字,java,regex,numbers,Java,Regex,Numbers,关于这个问题。我有一个新问题。我想从字符串中提取最后两个出现的数字(经度/纬度) 我使用参考答案中的方法。出现错误的简单示例如下: public static void main(String[] args) { String input = "St. Louis (38.6389, -90.342)"; Pattern p = Pattern.compile("-?[\\d\\.]+"); Matcher m = p.matcher(input); whi

关于这个问题。我有一个新问题。我想从字符串中提取最后两个出现的数字(经度/纬度)

我使用参考答案中的方法。出现错误的简单示例如下:

public static void main(String[] args) {
    String input = "St. Louis (38.6389, -90.342)"; 

    Pattern p = Pattern.compile("-?[\\d\\.]+");
    Matcher m = p.matcher(input);

    while(m.find()){
        System.out.println(m.group());
    }
}
控制台输出如下:

.
38.6389
-90.342
问题似乎是“圣路易斯”中的“.”。有人能帮我以一种好的方式解决这个问题吗


非常感谢您的每一个回答/评论

如下图所示更改正则表达式

Pattern p = Pattern.compile("-?\\d+(?:\\.\\d+)?");

(?:\\.\\d+)
最后将小数部分作为可选部分。

更改您的正则表达式,如下所示

Pattern p = Pattern.compile("-?\\d+(?:\\.\\d+)?");
[-+]?\\d+(\\.\\d+)?
(?:\\.\\d+)
最后一个将使小数部分成为可选部分

[-+]?\\d+(\\.\\d+)?
用于浮点数和整数

问题似乎是“圣路易斯”中的“.” 这是因为
-?[\\d\\.]+
[]
字符类。它可以匹配类内定义的任何字符

用于浮点数和整数

问题似乎是“圣路易斯”中的“.” 这是因为
-?[\\d\\.]+
[]
字符类
可以匹配类内定义的任何字符。

类似于
-?\d*(?:\.\d+)
的正则表达式会导致引擎在任何地方都找到零宽度匹配。更好的方法是简单地使用交替,要求有一个带数字的点,或者有一个或多个数字,之后有一个带更多数字的点是可选的:

-?(?:\.\d+|\d+(?:\.\d+)?)

在Java中,您需要这样做:

Pattern p = Pattern.compile("-?(?:\\.\\d+|\\d+(?:\\.\\d+)?)");
或者,您可以添加一个前瞻,要求某处至少有一个数字:

-?(?=\.?\d)\d*(?:\.\d+)?

类似正则表达式的
-?\d*(?:\。\d+)
会使引擎在任何地方都找到零宽度匹配。更好的方法是简单地使用交替,要求有一个带数字的点,或者有一个或多个数字,之后有一个带更多数字的点是可选的:

-?(?:\.\d+|\d+(?:\.\d+)?)

在Java中,您需要这样做:

Pattern p = Pattern.compile("-?(?:\\.\\d+|\\d+(?:\\.\\d+)?)");
或者,您可以添加一个前瞻,要求某处至少有一个数字:

-?(?=\.?\d)\d*(?:\.\d+)?


这无法捕获
.9
,这也是编写0.9的常用方法,包括在java的语法中然后这个
“-?\\d*(?:\\.\\d+)”
,但我认为
.9
将被写入
0.9
,这也是编写0.9的常用方法,包括在java的语法中然后这个
-?\\d>*(?:\.\\d+)“
,但我认为
.9
将被编写为
0.9
,这无法捕获
.9
,这也是编写0.9的常用方法,包括在java的syntax@amit我想如果OP想要的话应该向他澄清为什么他不想?这是一篇合法的文章,也许OP也应该明确地向他澄清如果他想要我也包括数字5吗?@amit,因为这些是
经度和纬度
。我不太确定这些数字是否可以出现,如果0.9可以出现,也不确定。9这无法捕捉
.9
,这也是编写0.9的常用方法,包括在java的syntax@amit我想如果OP想要或者不想要,应该向他说明原因他不会吗?这是一个合法的文字,也许OP也应该明确说明他是否想要包括数字5?amit,因为这些是经度和纬度。我不太确定这些数字是否可以出现,如果可以出现0.9,那么也可以。9