Próbuję wykonać proste wyrażenie regularne. Zasadniczo chcę sprawdzić, czy w łańcuchu znaków są specjalne znaki, a jeśli tak, sprawdź każdy znak ciągu dla dwóch określonych znaków, np. Hipen i kropka.Błąd testu Regex - Java
Wydaje mi się, że mam problem w pierwszym kawałku, który polega na określeniu, czy mam specjalne znaki w ciągu znaków.
Poniżej jest moja metoda, którą staram się to następnie strun Mam problemy z zrobić:
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;
}
poniżej są ciągi I przekazywane do metody, które spodziewałem się być traktowane jako ciągi ze specjalnym znaki ale test nie powiodła się:
"QWERTY"!£$"£$"
"sdfGSDFGSDFG%*^(%*&("
Poniżej są ciągi I przekazywane do metody, która się spodziewałem nie powinna być traktowana jako ciągi znaków specjalnych, ale próba nie powiodła się:
"QWE12342134RTY"
"LOREMIPSUM2354214"
Wszelkie sugestie są mile widziane.
Działa dla mnie ... 'Pattern.compile (" [^ a-zA-Z0-9] "). Matcher (" sdfGSDFGSDFG%^(% & ("). Find()' zwraca 'true '. ' Pattern.compile ("[^ a-zA-Z0-9]".) Matcher ("QWE12342134RTY"). Find() 'zwraca false – Dima
Funkcja działa po odkomentowaniu skomentowanych linii. –
@Dima and Salaman: Po odkomentowaniu instrukcji if i zmianie wzorca na [^ a-zA-Z0-9 \\ - \\.] Zadziałało. Dzięki za sugestie – TokTok123