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

时间:2015-01-10 10:16:35

标签: java arrays string character

我正在尝试创建一个计算给定字符串中特殊字符的程序。但它没有用。这是我的代码。

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.

2 个答案:

答案 0 :(得分:1)

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

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

BTW逐步调试你的代码会发现这很快。

怎么样。

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

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

答案 1 :(得分:1)

我看到的代码中存在一些问题

  1. + = - 我想你想每次增加点数。在代码中使用=将分配字符串中最后一个特殊字符的计数(“?”)
  2. password.replaceAll()不会修改原始字符串。 java中的字符串是不可变的。你必须再次将回报引用分配给自己。

    password = password.replaceAll(“REPLACING STRING”,“由STRING替换”);

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

    "specialChars[x]"specialChars[x]

  4. 之间存在差异
相关问题