计算给定字符串中特殊字符的数量
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;
我看到的代码中有几个问题
- += - 我想你每次都想增加计数。在代码中包含 = 将分配字符串中最后一个特殊字符的计数 ("?")
password.replaceAll() 不会修改原来的字符串。 java 中的字符串是不可变的。您将不得不再次将 return 引用分配给它自己。
密码=password.replaceAll("REPLACING STRING","REPLACED BY STRING");
以下代码中的第一个参数不应在引号内 password.replaceAll("\specialChars[x]", "")
。在您的情况下,它被视为字符串文字而不是 specialChars[x].
的实际值
"specialChars[x]"
和specialChars[x]
有区别
我正在尝试编写一个程序来计算给定字符串中的特殊字符。但它不起作用。这是我的代码。
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;
我看到的代码中有几个问题
- += - 我想你每次都想增加计数。在代码中包含 = 将分配字符串中最后一个特殊字符的计数 ("?")
password.replaceAll() 不会修改原来的字符串。 java 中的字符串是不可变的。您将不得不再次将 return 引用分配给它自己。
密码=password.replaceAll("REPLACING STRING","REPLACED BY STRING");
以下代码中的第一个参数不应在引号内
的实际值password.replaceAll("\specialChars[x]", "")
。在您的情况下,它被视为字符串文字而不是 specialChars[x]."specialChars[x]"
和specialChars[x]
有区别