【问题标题】:Java: how to extract a number from a string where the number is a prefix?Java:如何从数字为前缀的字符串中提取数字?
【发布时间】:2013-06-06 22:27:55
【问题描述】:
我需要将字符串转换为数字。问题是字符串是用户输入的,它后面可能有单位,所以数字部分实际上是一个前缀。下面是一些例子:
"8.1 in"
"3.0cm"
"90%"
"4'"
我无法提取号码。 NumberFormat.parse() 看起来很有希望。但是,它具有不稳定的行为。它将“4%”和“4x”解析为 4.0 就好了,但它会在“4'”和“4”上抛出 ParseException(在 Locale.US 中)。
扫描仪看起来也很有希望,但在最后 3 种情况下它失败了,因为我认为数字部分和单位之间没有分隔符。如何可靠地解析浮动直到第一个非法字符,并且无论语言环境如何都正确执行?
【问题讨论】:
标签:
java.util.scanner
string-parsing
number-formatting
【解决方案1】:
您可以使用正则表达式。应该这样做:
public class NumExtractor {
public static void main(String args[]) {
final String EXAMPLE_TEST = "HELLO32This is my small example ";
String pattern = "\\D";
System.out.println(EXAMPLE_TEST.replaceAll(pattern, ""));
}
}
上面的代码会输出:
32
编辑:我刚刚意识到您希望输出为数字。这是一个修订:
public class NumExtractor {
public static void main(String args[]) {
final String EXAMPLE_TEST = "HELLO32This is my small example ";
String pattern = "\\D";
double number = Double.parseDouble(EXAMPLE_TEST.replaceAll(pattern, ""));
System.out.println(number);
}
}
如果数字中有小数位,则解析为双精度数。