3

Java のParseIntメソッドは、例外をスローすることなく、先頭にゼロを付けて提供された 10 進数値を喜んで解析し、ゼロを取り除きます。

int value = Integer.parseInt("050", 10);

整数値 50 になります。

しかし、このような文字列を無効な入力として拒否する必要があるアプリケーションがあります。これまでの問題に対する私の解決策は、解析された整数を文字列に変換し、元の/解析された文字列の長さを比較して、文字が削除されているかどうかを確認することでした。

String original = "050";
value  = Integer.parseInt( "050", 10);
String parsed = Integer.toString(value);
if (original.length() != parsed.length()) {
    System.exit(1);
}

これは問題なく動作しますが、少しハッキーに感じます。先行ゼロを検出して処理するより良い方法はありますか?

4

3 に答える 3

0

文字列入力を取得すると、メソッドを使用String.charAt(int)して明示的な文字をチェックできます。ただし、input.charAt(0)ユーザーが使用しているだけの場合、先頭のゼロをスペースで避けることができます。

私がすることをお勧めします:

String decimalChars = "123456789";

boolean reject = true, hasZeros = false;
for (int i = 0; i < input.length; i++) {
    if (input.charAt(i) == '0') { // or other chars you don't want
        hasZeros = true;
        reject = false;
    } else if (decimalChars.contains(input.charAt(i)) {
           if (hasZeros) {
               reject = true;
            } else {
                reject = false;
            }
            break;
        }
    }
}

それを使用して、チェックすることで間違った入力を拒否したいことは何でもできますreject。decimalChars 配列にある文字が見つかると、コードが壊れます。reject前にゼロが見つかった場合は true になり、それ以外の場合は false になります。このコードも先頭にスペースを許可し、 のような入力を拒否しません0000rejecttrue で初期化されるため、空の文字列も拒否されます。

これが役立つことを願っています!

于 2015-02-05T13:42:08.333 に答える