0

文字列に正のintが含まれているかどうかを判断しようとしています。私のコードは次のとおりです。

public void isInt(String str) throws NotIntException{
    String integer=str.replaceAll("\\d","");
    System.out.println(integer);
    if (!integer.equals("")){
        throw new NotIntException("Wrong data type-check fields where an integer"+
        " should be.");
    }//end if
    if (integer.equals("-")){
        System.out.println(integer);
        throw new NotIntException("Error-Can't have a negative count.");
    }//end if
}//end method

私はこれを文字列「-1」でテストしています。これは、replaceAll()の後、「-」になるはずです。これは両方のifステートメントを入力する必要があります。しかし、それは最初に入るだけです。念のため、==比較でも試してみましたが、どちらも機能しませんでした。私にとって奇妙なのは、2番目のifステートメントの条件を満たすか、その否定[つまり、!integer.equals( "-")]を満たそうとしても、プログラムがif...に入らないことです。

おかげで、通常、私の比較の問題は、基本的なものが欠けているだけですが、実際にはここには何も表示されません...

4

4 に答える 4

3

最初のifで例外をスローしているため、2番目のifはテストされません。

if (!integer.equals("")){
    throw new NotIntException("Wrong data type-check fields where an integer"+
    " should be.");
}

if (integer.equals("-")){
    System.out.println(integer);
    throw new NotIntException("Error-Can't have a negative count.");
}

コードが最初の に入るとif、それ以上実行されません。


しかし、なぜあなたの問題にこのアプローチを使用しているのでしょうか。

有効かどうかを簡単Integer.parseIntに確認できますinteger。そして、それが有効な場合は、less than 0. はるかに簡単で読みやすいでしょう。

于 2012-11-08T22:32:34.000 に答える
1

私の解決策:

public static boolean isPositiveInt(String str) {
    try {
       int number = Integer.parseInt(str.trim());
       return number >= 0;
    } catch (NumberFormatException e) {
       return false;
    }
}
于 2012-11-08T22:54:15.947 に答える
0

文字列から単純に int を読み取りたい場合は、Integer.parseInt() を使用しますが、これは、文字列が int であるかどうかを確認する場合にのみ機能しますが、含まれていません。

Integer.parseInt() とループ戦略の組み合わせを使用して、int が含まれているかどうかを簡単に確認できます。次に、それが正かどうかを確認します。

于 2012-11-08T22:34:54.710 に答える
0

あなたのアプローチは複雑すぎます。私はそれを簡単に保ちます:

if (integer.startsWith("-")) {
    // it's a negative number
}

if (!integer.matches("^\\d+$")) {
    // it's not all-numbers
}

への呼び出しを忘れるreplaceAll()

于 2012-11-08T22:36:21.457 に答える