计算给定字符串中特殊字符的数量

Counting number of special characters in a given String

我正在尝试编写一个程序来计算给定字符串中的特殊字符。但它不起作用。这是我的代码。

public static final String []specialChars = {"!", "@", "#", "$", "%", "^", "&", "*", "(", ")",
                                             "[", "]", "|", ";", "'", ",", ".", "/", "{", "}", 
                                             "\", ":", "\"", "<", ">", "?" };

我使用数组是因为我试图在字符串中跟踪匹配的特殊字符。所以我决定循环。

int specialCharCount = 0;
        for ( int x = 0; x < specialChars.length ; ++x) {
               specialCharCount = password.length() - password.replaceAll("\specialChars[x]", "").length();
           }
           System.out.print(" and " + specialCharCount + " special characters.\n\n");

它是 运行 但它给了我这个输出:

and 0 special characters.

你的问题是你只考虑了最后一个字符的数字。我怀疑您想要所有特殊字符计数的总和。

for( int x = 0; x < specialChars.length ; ++x) {
    specialCharCount += password.length() 
                    - password.replaceAll("\" + specialChars[x], "").length();
}

顺便说一句,在你的调试器中单步执行你的代码会很快发现这一点。

怎么样。

String SPECIAL_CHARS_REGEX = "[!@#$%^&*()\[\]|;',./{}\\:\"<>?]";

int specials = password.split(SPECIAL_CHARS_REGEX, -1).length - 1;

我看到的代码中有几个问题

  1. += - 我想你每次都想增加计数。在代码中包含 = 将分配字符串中最后一个特殊字符的计数 ("?")
  2. password.replaceAll() 不会修改原来的字符串。 java 中的字符串是不可变的。您将不得不再次将 return 引用分配给它自己。

    密码=password.replaceAll("REPLACING STRING","REPLACED BY STRING");

  3. 以下代码中的第一个参数不应在引号内 password.replaceAll("\specialChars[x]", "")。在您的情况下,它被视为字符串文字而不是 specialChars[x].

    的实际值

    "specialChars[x]"specialChars[x]

  4. 有区别