我正在尝试执行一个简单的正则表达式。本质上,我想确定我的字符串中是否有特殊字符,如果有,就检查字符串的每个字符是否具有两个特定的字符,即连字符和句点。
我似乎在第一部分遇到了问题,这部分涉及确定我的字符串中是否有特殊字符。
以下是我尝试使用的方法,后面是我遇到问题的字符串:
public static boolean stringValidity(String input) {
int specials = 0;
Pattern p = Pattern.compile("[^a-zA-Z0-9 ]");
Matcher m = p.matcher(input);
boolean b = m.find();
if (b) {
System.out.println("\nstringValidity - There is a special character in my string");
for (int i = 0; i < input.length(); ++i) {
char ch = input.charAt(i);
//if (!Character.isDigit(ch) && !Character.isLetter(ch) && !Character.isSpace(ch)) {
++specials;
System.out.println("\nstringValidity - Latest number of special characters is: " + specials);
if((ch == '-') | (ch == '.')) {
specialCharValidity = true;
System.out.println("\nstringValidity - CHAR is valid - specialCharValidity is: " + specialCharValidity + " as char is: " + ch);
} else {
specialCharValidity = false;
System.out.println("\nstringValidity - CHAR is invalid - specialCharValidity is: " + specialCharValidity + " as char is: " + ch);
break;
}
//}
}
} else {
System.out.println("\nstringValidity - There is NO special character in my string");
specialCharValidity = true;
}
return specialCharValidity;
}
以下是我传递给方法的字符串,我期望它们被视为带有特殊字符的字符串,但测试失败了:
"QWERTY"!£$"£$"
"sdfGSDFGSDFG%*^(%*&("
以下是我传递给该方法的字符串,我原以为它们不会被视为带特殊字符的字符串,但测试失败了:
"QWE12342134RTY"
"LOREMIPSUM2354214"
非常感谢您的提议和建议,我们将认真考虑并加以采纳。
Pattern.compile("[^a-zA-Z0-9 ]").matcher("sdfGSDFGSDFG%^(%&(").find()
返回true
。Pattern.compile("[^a-zA-Z0-9 ]").matcher("QWE12342134RTY").find()
返回false
。 - Dima