我需要一个方法,可以告诉我,如果一个字符串有非字母数字字符。
例如,如果 String 是“ abcdef?”或“ abcdefà”,则方法必须返回 true。
您必须遍历 String 中的每个字符并检查 Character.isDigit(char);或 Character.isletter(char);
Character.isDigit(char);
Character.isletter(char);
或者,您可以使用正则表达式。
如果您可以使用 ApacheCommons 库,那么 Commons-Lang StringUtils有一个名为 isAlphanumeric()的方法,它可以完成您所需要的工作。
StringUtils
isAlphanumeric()
使用 Apache Commons Lang:
!StringUtils.isAlphanumeric(String)
或者迭代 String 的字符并检查:
!Character.isLetterOrDigit(char)
你还有一个问题: 您的示例字符串“ abcdefà”是字母数字,因为 à是一个字母。但我觉得你希望它被认为是非字母数字的,对吧!
à
因此,您可能需要改用正则表达式:
String s = "abcdefà"; Pattern p = Pattern.compile("[^a-zA-Z0-9]"); boolean hasSpecialChar = p.matcher(s).find();
一种方法是使用 String 类本身完成此操作。 假设你的字符串是这样的:
String s = "some text"; boolean hasNonAlpha = s.matches("^.*[^a-zA-Z0-9 ].*$");
另一种方法是使用外部库,比如 Apache commons:
String s = "some text"; boolean hasNonAlpha = !StringUtils.isAlphanumeric(s);
string.matches("^\\W*$");应该做你想做的,但它不包括空格。 string.matches("^(?:\\W|\\s)*$");也匹配空格。
string.matches("^\\W*$");
string.matches("^(?:\\W|\\s)*$");
可以在 Java.lang 中使用字符类的 isLetters (char c)静态方法。
public boolean isAlpha(String s) { char[] charArr = s.toCharArray(); for(char c : charArr) { if(!Character.isLetter(c)) { return false; } } return true; }
使用此函数检查字符串是否为字母数字:
public boolean isAlphanumeric(String str) { char[] charArray = str.toCharArray(); for(char c:charArray) { if (!Character.isLetterOrDigit(c)) return false; } return true; }
它节省了必须导入外部库的时间,而且如果您以后希望对字符串执行不同的验证检查,可以很容易地修改代码。
虽然对于数字不起作用,但是你可以检查小写和大写的值是否相同,对于非字母的字符它们是相同的,你应该在这之前检查一下数字,以便更好的使用