0

私のプログラムでは、コンソールからの入力を読み取り、それが数値かどうかを判断します。Numbers can be any decimal +-. たとえば、-123.18p18 と同じように、123.18p18 は非数字であるため許可されません。これを行う悪い方法 (私が現在行っている) は、それが double であるかどうかをチェックして例外をキャッチすることですが、文字列を解析しているだけなので、ここでは正規表現を使用する方がはるかに優れていると思います。これは、その使用 (正規表現) の私の最初の日であり、エイリアン言語のようです。

思いついたの".*\\D+.*"ですが、それは正の数しか扱いません。

編集:整数も受け入れられます。

4

4 に答える 4

2

最初の問題を解決するには、 java.util.Scannerクラスを使用できます。次の入力が整数、倍精度などであるかどうかをテストしたり、次の入力が特定の正規表現に準拠しているかどうかをテストしたりするためのメソッドを提供します。

import java.util.Scanner;
//...
Scanner s = new Scanner(System.in);

while ( s.hasNext() ) {
    if ( s.hasNextInt() ) {
        int i = s.readInt();
        // Some work.
    } else if ( s.hasNextDouble() ) {
        double d = s.nextDouble();
        // Some work.
    } else if ( s.hasNext(regex) ) {
        String t = s.next(regex);
        // Some work.
    }
    // etc.
}
于 2013-02-05T14:41:46.840 に答える
2

あなたは探している:

"^[+-]?\\d+([.]\\d+)?$"

先頭にオプションのプラスまたはマイナス、その後に少なくとも 1 つの数字が続きます。文字列の末尾の前に、必要に応じて 1 つのドットとそれに続く少なくとも 1 つの数字を指定できます。

于 2013-02-05T14:20:10.777 に答える
1

次の正規表現が役立つ場合があります。

+ または - で始まり、その後に 0 個以上の数字が続くパターンを定義します。小数点がある場合は、少なくとも 1 つの数字が続く必要があります。

"^[+-]?\\d+(?:\\.?\\d+)$"
于 2013-02-05T14:18:09.173 に答える
0

試しdouble doubleInstance = Double.parseDouble(string);て続行...

于 2013-02-05T14:24:34.650 に答える