0

我需要将字符串转换为数字。问题是字符串是用户输入的,它后面可能有单位,所以数字部分实际上是一个前缀。这里有些例子:

"8.1 in"
"3.0cm"
"90%"
"4'"

我无法提取号码。NumberFormat.parse() 看起来很有希望。但是,它具有不稳定的行为。它将“4%”和“4x”解析为 4.0 就好了,但它在“4'”和“4”(在 Locale.US 中)抛出 ParseException。

扫描仪看起来也很有希望,但在最后 3 种情况下它失败了,因为我认为数字部分和单位之间没有分隔符。如何可靠地将浮点数解析第一个非法字符,并且无论语言环境如何都正确执行?

4

1 回答 1

0

您可以使用正则表达式。这样的事情应该做:

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); 
    }
}

如果数字中有小数位,则解析为双精度数。

于 2013-06-06T22:37:14.867 回答