我正在尝试创建一个计算给定字符串中特殊字符的程序。但它没有用。这是我的代码。
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.
答案 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)
我看到的代码中存在一些问题
password.replaceAll()不会修改原始字符串。 java中的字符串是不可变的。你必须再次将回报引用分配给自己。
password = password.replaceAll(“REPLACING STRING”,“由STRING替换”);
以下代码中的第一个参数不应该是引号内的password.replaceAll("\\specialChars[x]", "")
。在您的情况下,它被视为字符串文字,而不是specialChars [x]的实际值。
"specialChars[x]"
和specialChars[x]