0

JAVA を使用して文字、数字、記号の数を数えたいのですが、結果の出力は理想的ではありません。5,2,4のはずですが、5,2,13になりました

    int charCount = 0;
    int digitCount = 0;
    int symbol = 0;
    char temp;
    String y = "apple66<<<<++++++>>>";
    for (int i = 0; i < y.length(); i++) {
        temp = y.charAt(i);

        if (Character.isLetter(temp)) {
            charCount++;
        } else if (Character.isDigit(temp)) {
            digitCount++;
        } else if (y.contains("<")) {
            symbol++;
        }
    }

          System.out.println(charCount);
          System.out.println( digitCount);
          System.out.println( symbol);
4

6 に答える 6

2

そのはず

    } else if (temp == '<')) {
        symbol++;
    }

あなたのソリューションでは、文字または数字以外のすべての文字について、文字列全体に が含まれている <かどうかを確認します。これは常に真です(少なくともあなたの例では)ので、得られる結果は文字列内の特殊文字の数です。

于 2013-11-04T09:34:44.513 に答える
1

y.contains("<") ではなくy.charAt(i) == '<'を使用する必要があります

y.contains("<") を使用すると、文字列全体を使用して「<」が含まれているかどうかがチェックされます。文字列 y には「<」が含まれているためです。for ループでは、4 つの '<'、6 つの '+'、および 3 つの '>' があります。

このような文字をチェックする場合、y.contains("<") は常に true になります。そのため、シンボルに対して 4 ではなく 13 (=4+6+3) が得られます。

于 2013-11-04T09:36:32.560 に答える
0
else if (y.contains("<")) {

する必要があります

else if (temp == '<') {

そうしないと、文字や数字がないたびに発生するからです。

于 2013-11-04T09:35:59.053 に答える
0
y.contains("<")

文字列"<"内の部分文字列"apple66<<<<++++++>>>"を検索し、常にそれを見つけます。これは、文字も数字も含まない13部分文字列の文字数である回数発生します。<<<<++++++>>>"

于 2013-11-04T09:39:10.917 に答える