如何确定字符串是否包含非字母数字字符?

2022-08-31 12:41:13

我需要一个可以告诉我字符串是否包含非字母数字字符的方法。

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


答案 1

使用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();

答案 2

一种方法是使用 String 类本身来执行此操作。假设您的字符串是这样的:

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

另一个是使用外部库,例如Apache commons:

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