Java 正则表达式,字符串到浮点数,去掉其他字符
对于像Java 正则表达式,字符串到浮点数,去掉其他字符,java,regex,Java,Regex,对于像123.456mm这样的刺,我想得到一个带数字的字符串,另一个带测量值的字符串。因此,在上述情况下,一个字符串为123.456,另一个字符串为mm。到目前为止,我有: String str = "123.456mm"; String length = str.replaceAll("[\\D|\\.*]+",""); String lengthMeasurement = str.replaceAll("[\\W\\d]+",""); println(length, lengthMeas
123.456mm
这样的刺,我想得到一个带数字的字符串,另一个带测量值的字符串。因此,在上述情况下,一个字符串为123.456
,另一个字符串为mm
。到目前为止,我有:
String str = "123.456mm";
String length = str.replaceAll("[\\D|\\.*]+","");
String lengthMeasurement = str.replaceAll("[\\W\\d]+","");
println(length, lengthMeasurement);
输出为:
123456mm
圆点不见了,我拿不回来了。
如何保留这些点?您可以使用:
String str = "123.456mm";
String length = str.replaceAll("[^\\d.]+",""); // 123.456
String lengthMeasurement = str.replaceAll("[\\d.]+",""); // mm
尝试使用下面的正则表达式,并从索引1和2中获得匹配的组
(\d+\.?\d*)(\D+)
请尝试以下示例代码:
String str = "123.456mm";
Pattern p = Pattern.compile("(\\d+\\.?\\d*)(\\D+)");
Matcher m = p.matcher(str);
if (m.find()) {
System.out.println("Length: " + m.group(1));
System.out.println("Measurement : " + m.group(2));
}
输出:
Length:123.456
Measurement :mm
图案说明:
( group and capture to \1:
\d+ digits (0-9) (1 or more times)
\.? '.' (optional (0 or 1 time))
\d* digits (0-9) (0 or more times)
) end of \1
( group and capture to \2:
\D+ non-digits (all but 0-9) (1 or more times)
) end of \2
试试看
输出:
123.456
mm
您遇到了问题,决定使用正则表达式。现在你有两个问题。同意Nit。这个问题可能会更好地通过以下方式解决:
Object[]values=newmessageformat(“{0,number}{1}”).parse(str);数字数量=(数字)值[0];字符串单位=(字符串)值[1]如果使用“123.456”而不是“123.456mm”,代码>不会失败吗?不,单位只是一个空字符串。这就是说,如果您希望使用单位指定一个值,我会小心不允许使用没有单位的数字;假设已知某个特定的度量单位会导致。
123.456
mm