如何确定字符串是否具有非字母数字字符?

我需要一个方法,可以告诉我,如果一个字符串有非字母数字字符。

例如,如果 String 是“ abcdef?”或“ abcdefà”,则方法必须返回 true。

235209 次浏览

您必须遍历 String 中的每个字符并检查 Character.isDigit(char);Character.isletter(char);

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

如果您可以使用 ApacheCommons 库,那么 Commons-Lang 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)*$");也匹配空格。

可以在 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;
}

它节省了必须导入外部库的时间,而且如果您以后希望对字符串执行不同的验证检查,可以很容易地修改代码。

虽然对于数字不起作用,但是你可以检查小写和大写的值是否相同,对于非字母的字符它们是相同的,你应该在这之前检查一下数字,以便更好的使用