2011-11-23 165 views
54

我需要一种方法可以告诉我一个字符串是否包含非字母数字字符。如何确定一个字符串是否包含非字母数字字符?

例如,如果字符串是“abcdef?”或“abcdefà”,该方法必须返回true。

+1

http://stackoverflow.com/questions/1795402/java-check-a-string-if-there-is-a-special-character-in-it –

+0

http://stackoverflow.com/questions/11241690/regex-for-checking-if-a-string-is-strict-alphanumeric – treecoder

回答

115

使用Apache Commons Lang中:

!StringUtils.isAlphanumeric(String) 

Alternativly遍历字符串的字符,并检查:

!Character.isLetterOrDigit(char) 

你还有一个问题留给: 你举的例子字符串 “abcdefà” 是字母数字,因为à是一封信。但我认为你希望它被认为是非字母数字的,对吧?!

所以,你可能需要使用正则表达式来代替:

String s = "abcdefà"; 
Pattern p = Pattern.compile("[^a-zA-Z0-9]"); 
boolean hasSpecialChar = p.matcher(s).find(); 
+5

我想避免导入外部库,如果不是绝对必要的。是的:我希望à被视为非字母数字。 – lugeno

4

你必须要经过每一个字符字符串,并检查Character.isDigit(char);Character.isletter(char);

或者,你可以使用正则表达式。

+1

例如,“-1234”是一个数字,而不是字母数字字符串。但是你的逻辑Character.isDigit将返回false为“ - ”。 :( – Abhishek

1

如果您可以使用Apache Commons库,那么Commons-Lang StringUtils有一个名为isAlphanumeric()的方法,它可以完成您正在寻找的任务。

21

一种方法是使用String类本身做。 比方说,你的字符串是类似的东西:

String s = "some text"; 
boolean hasNonAlpha = s.matches("^.*[^a-zA-Z0-9 ].*$"); 

另外一个是使用一个外部库,比如Apache Commons:中

String s = "some text"; 
boolean hasNonAlpha = !StringUtils.isAlphanumeric(s); 
+0

+1:正则表达式在这里是我认为的赢家,因为OP并不真正想检查字母数字字符,他想要像'hasSpecialCharacters(String)'和他自己定义的“special” –

+2

这不会起作用:Java中的String.matches(...)检查正则表达式是否匹配*整个*字符串。 – ruakh

+1

你说得对。我修改了正则表达式 – loscuropresagio

1

string.matches("^\\W*$");应该做你想要什么,但它不包括空格。 string.matches("^(?:\\W|\\s)*$");也匹配空格。

0

您可以在Java.lang中使用isLetter(char c)Character类的静态方法。

public boolean isAlpha(String s) { 
    char[] charArr = s.toCharArray(); 

    for(char c : charArr) { 
     if(!Character.isLetter(c)) { 
      return false; 
     } 
    } 
    return true; 
} 
1

使用此功能来检查一个字符串是否是字母:

public boolean isAlphanumeric(String str) 
{ 
    char[] charArray = str.toCharArray(); 
    for(char c:charArray) 
    { 
     if (!Character.isLetterOrDigit(c)) 
      return false; 
    } 
    return true; 
} 

它省去了导入外部库和代码可以很容易地修改你应该以后要执行对字符串不同的验证检查。

相关问题