Potrzebuję metody, która może mi powiedzieć, czy ciąg ma nie alfanumeryczne znaki.Jak ustalić, czy ciąg ma niealfanumeryczne znaki?
Na przykład, jeśli ciąg znaków to "abcdef?" lub "abcdefà", metoda musi zwracać wartość true.
Potrzebuję metody, która może mi powiedzieć, czy ciąg ma nie alfanumeryczne znaki.Jak ustalić, czy ciąg ma niealfanumeryczne znaki?
Na przykład, jeśli ciąg znaków to "abcdef?" lub "abcdefà", metoda musi zwracać wartość true.
Korzystanie z Apache Commons Lang:
!StringUtils.isAlphanumeric(String)
Alternativly iteracyjnego znaków String i skontaktować się z:
!Character.isLetterOrDigit(char)
pan jeszcze jeden problem lewej: Twój przykład ciąg "abcdefà" jest alfanumeryczny, od à
jest list. Ale myślę, że chcesz go uznać za niealfanumeryczny, prawda ?!
Więc może chcesz użyć wyrażenia regularnego zamiast:
String s = "abcdefà";
Pattern p = Pattern.compile("[^a-zA-Z0-9]");
boolean hasSpecialChar = p.matcher(s).find();
Chciałbym uniknąć importowania zewnętrznych bibliotek, jeśli nie jest to absolutnie konieczne.A tak: chcę, aby uznać je za niealfanumeryczne – lugeno
Musisz przejść przez każdy znak w ciągu i sprawdzić Character.isDigit(char);
lub Character.isletter(char);
Alternatywnie, można użyć wyrażenia regularnego.
Na przykład "-1234" to liczba, a nie ciąg alfanumeryczny. Ale Twoja logika Character.isDigit zwróci wartość false dla "-". :( – Abhishek
Jeśli możesz korzystać z biblioteki Apache Commons, Commons-Lang StringUtils
ma metodę o nazwie isAlphanumeric()
, która robi to, czego szukasz.
Jednym ze sposobów jest to zrobić za pomocą klasy String siebie. Załóżmy, że ciąg jest coś takiego:
String s = "some text";
boolean hasNonAlpha = s.matches("^.*[^a-zA-Z0-9 ].*$");
jedna jest użycie zewnętrznej biblioteki, takich jak Gmin Apache:
String s = "some text";
boolean hasNonAlpha = !StringUtils.isAlphanumeric(s);
+1: regex jest tutaj zwycięzcą Myślę, że od czasu, gdy OP nie chce naprawdę sprawdzić znaki alfanumeryczne, chce czegoś takiego jak 'hasSpecialCharacters (String)' z własną definicją "special" –
To nie będzie działać: 'String.matches (...)' w Javie sprawdza, czy wyrażenie regularne pasuje do * cały * ciąg. – ruakh
Masz rację. Zmodyfikowałem wyrażenie regularne – loscuropresagio
string.matches("^\\W*$");
powinien robić to, co chcesz, ale to nie robi obejmują białe spacje. string.matches("^(?:\\W|\\s)*$");
również pasuje do białych znaków.
Możesz użyć statycznej metody isLetter (char c) klasy Character w Java.lang.
public boolean isAlpha(String s) {
char[] charArr = s.toCharArray();
for(char c : charArr) {
if(!Character.isLetter(c)) {
return false;
}
}
return true;
}
Funkcja ta służy do sprawdzenia, czy ciąg jest alfanumeryczny:
public boolean isAlphanumeric(String str)
{
char[] charArray = str.toCharArray();
for(char c:charArray)
{
if (!Character.isLetterOrDigit(c))
return false;
}
return true;
}
oszczędza konieczności importowania zewnętrznych bibliotek i kod może być łatwo modyfikowane należy później chcą wykonywać różne weryfikację na sznurkach .
http://stackoverflow.com/questions/1795402/java-check-a--tring-if-there-is-a-special-character-in-it –
http://stackoverflow.com/questions/11241690/regex-for-checking-if-a-string-is-strictly-alphanumeric – treecoder