在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