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.charAt(i) == '<'而不是 y.contains("<")

如果你使用 y.contains("<"),它会使用整个字符串来检查它是否包含 '<'。由于字符串 y 包含“<”。在for循环中,有4个'<',6个'+'和3个'>'。

对于检查此类字符,y.contains("<") 始终为真。这就是为什么符号得到 13 (=4+6+3) 而不是 4 的原因。

于 2013-11-04T09:36:32.560 回答
0

这一点是错误的:

y.contains("<")

当您只想检查单个字符(临时)时,您每次都检查整个字符串

于 2013-11-04T09:34:49.227 回答
0
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 (temp =="<") {
        symbol++;
    }
}****
于 2013-11-04T09:35:48.153 回答
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 回答