0

コードに問題があります。char内の位置が整数に等しいかどうかをテストしようとしています。私がそれをセットアップする方法は次のようです:

    for(int i = 0; i < str.length(); i++) {
        if(str.charAt(i) == '[1234567890]') {
            System.out.println(str);
        }
    }

ただし、コンパイルしようとすると、「unclosedcharacterliteral」というエラーが発生します。エラーが発生する理由を誰かが知っていますか、またはこれを行うためのより簡単な方法を説明できますか?

4

5 に答える 5

4

試す:

if ( Character.isDigit(str.charAt(i)) )

文字列に整数が含まれているかどうかを確認するには、すべての文字が数字であることを確認する必要があります。

于 2012-10-15T20:57:07.983 に答える
3

'[1234567890]'ではありませんchar。Acharは1文字です。これが、コードがコンパイルされない理由です。

于 2012-10-15T20:55:52.793 に答える
0

文字リテラル内で正規表現表記を使用しようとしているようです。それはうまくいきません。正規表現を使用する場合は、次のように記述できます。

        if(str.substring(i, i+1).matches("[1234567890]") {

しかし、書く方が良い/簡単/速い/明確です:

        if(Character.isDigit(str.charAt(i))) {

一方、この変更を行っても、str数桁のコードが含まれていると、コードは数回印刷されます。それは本当にあなたが欲しいですか?このようなものがもっと必要かどうか疑問に思います:

    if(str.matches("\d+"))
         System.out.println(str);

すべての文字が数字のstr場合、1回印刷されます。

于 2012-10-15T20:58:11.717 に答える
0

'Java文字(一重引用符)で1文字をマークするために使用されているため、コードをコンパイルできません。文字列を定義するには、二重引用符を使用する必要があります"

あなたの場合、文字列に数字のみが含まれていて、誤って使用しようとした正規表現構文と混同されていないかどうかを確認したいと思います。

次のようにifステートメントを書き直すことができます。

char c = str.charAt(i); if(c>= '0' && c <= 9) {

またはパターンマッチングを使用します。 Pattern.compile("\\d+").matcher(str).matches()

この場合、ループを実装する必要はありません。

于 2012-10-15T21:01:02.820 に答える
0

私はあなたがこのような単純な何かを書こうとしていると思います:

for(int i = 0; i < str.length(); i++) {
    //check str.charAt(i) is one of the chars in 1234567890
    if("1234567890".indexOf(str.charAt(i))>=0) {   
        System.out.println(str.charAt(i));
    }
 }
于 2012-10-15T21:13:28.590 に答える