Dam*_*ski 2 java regex floating-point
让我们说我有这样的字符串:
eXamPLestring> 1.67 >> ReSTOfString
我的任务是从上面的字符串中仅提取1.67.
我认为正则表达式是有用的,但我无法弄清楚如何编写propper表达式.
如果你想提取所有Int的和Float的从String,你可以按照我的解决方案:
private ArrayList<String> parseIntsAndFloats(String raw) {
ArrayList<String> listBuffer = new ArrayList<String>();
Pattern p = Pattern.compile("[0-9]*\\.?[0-9]+");
Matcher m = p.matcher(raw);
while (m.find()) {
listBuffer.add(m.group());
}
return listBuffer;
}
Run Code Online (Sandbox Code Playgroud)
如果您还要解析负值,可以[-]?像这样添加到模式:
Pattern p = Pattern.compile("[-]?[0-9]*\\.?[0-9]+");
Run Code Online (Sandbox Code Playgroud)
如果您还想设置,为分隔符,可以,?像这样添加到模式:
Pattern p = Pattern.compile("[-]?[0-9]*\\.?,?[0-9]+");
Run Code Online (Sandbox Code Playgroud)
.
要测试模式,您可以使用此在线工具:http://gskinner.com/RegExr/
注意:对于这个工具,如果你正在尝试我的例子,请记得unescape(你只需要取下其中一个\)
String s = "eXamPLestring>1.67>>ReSTOfString>>0.99>>ahgf>>.9>>>123>>>2323.12";
Pattern p = Pattern.compile("\\d*\\.\\d+");
Matcher m = p.matcher(s);
while(m.find()){
System.out.println(">> "+ m.group());
}
Run Code Online (Sandbox Code Playgroud)
仅提供浮动
>> 1.67
>> 0.99
>> .9
>> 2323.12
Run Code Online (Sandbox Code Playgroud)