0

文字列を数値に変換する必要があります。問題は、文字列がユーザー入力であり、その後に単位が含まれている可能性があるため、数値部分が事実上接頭辞になっていることです。ここではいくつかの例を示します。

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

番号の抽出に問題があります。NumberFormat.parse() は有望に見えました。ただし、動作が不安定です。"4%" と "4x" を 4.0 にうまく解析しますが、"4'" と "4," (Locale.US) で ParseException をスローします。

Scanner も有望に見えましたが、数値部分と単位の間に区切り文字がないため、最後の 3 つのケースでは失敗しました。floatを最初の不正な文字まで確実に解析し、ロケールに関係なく正しく解析するにはどうすればよいですか?

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

数値に小数点以下の桁数がある場合は、double として解析します。

于 2013-06-06T22:37:14.867 に答える