我需要一种方法,可以告诉我一个字符串是否包含非字母数字字符。
例如,如果字符串是“abcdef?”或“abcdefà”,该方法必须返回true。
我需要一种方法,可以告诉我一个字符串是否包含非字母数字字符。
例如,如果字符串是“abcdef?”或“abcdefà”,该方法必须返回true。
使用Apache Commons Lang:
!StringUtils.isAlphanumeric(String)
或者迭代字符串的字符并使用以下方式进行检查:
!Character.isLetterOrDigit(char)
你还有一个问题:
你的示例字符串 "abcdefà" 是字母数字组合,因为 à
是一个字母。但我想你希望它被视为非字母数字字符,是吗?!
因此,你可能需要使用正则表达式来解决:
String s = "abcdefà";
Pattern p = Pattern.compile("[^a-zA-Z0-9]");
boolean hasSpecialChar = p.matcher(s).find();
StringUtils.isAlphaNumeric("abc");
如果字符串仅包含字母,则返回 true
。 - Brooklyn99一种方法是使用String类本身来实现。 假设你的字符串是这样的:
String s = "some text";
boolean hasNonAlpha = s.matches("^.*[^a-zA-Z0-9 ].*$");
另一种方法是使用外部库,例如Apache commons:
String s = "some text";
boolean hasNonAlpha = !StringUtils.isAlphanumeric(s);
hasSpecialCharacters(String)
这样的东西,并使用自己定义的“特殊”字符。 - Fabian BarneyString.matches(...)
检查正则表达式是否与整个字符串匹配。 - ruakhboolean hasNonAlpha = ! … ^[A-Za-z0-9 ]*$
- Isaak Osipovich Dunayevsky您需要逐个检查字符串中的每个字符,并检查 Character.isDigit(char);
或 Character.isLetter(char);
或者,您可以使用正则表达式。
使用此函数检查字符串是否为字母数字:
public boolean isAlphanumeric(String str)
{
char[] charArray = str.toCharArray();
for(char c:charArray)
{
if (!Character.isLetterOrDigit(c))
return false;
}
return true;
}
这样做可以避免导入外部库,而且代码可以轻松修改,以便在以后需要对字符串执行不同的验证检查时使用。
StringUtils
类中有一个叫做 isAlphanumeric()
的方法可以完成您所需的功能。string.matches("^\\W*$");
可以满足你的需求,但它不包括空格。 string.matches("^(?:\\W|\\s)*$");
包括空格。
虽然它不能用于数字,但您可以检查小写和大写值是否相同。对于非字母字符,它们将是相同的。在此之前,您应该先检查数字以获得更好的可用性。
你可以在Java.lang中使用Character类的isLetter(char c)静态方法。
public boolean isAlpha(String s) {
char[] charArr = s.toCharArray();
for(char c : charArr) {
if(!Character.isLetter(c)) {
return false;
}
}
return true;
}
/**
* <p>Checks if the String contains both letters and digits.</p>
*
* <p>{@code null} will return {@code false}.
* An empty String str.isEmpty() will return {@code false}.</p>
*
* @param str the String to check, may be null
* @return {@code true} if only contains letters and digits,
* and is non-null or not empty
*/
public static boolean isAlphaAndNumeric(String str) {
if (str == null || str.isEmpty()) {
return false;
}
Pattern pattern = Pattern.compile("^[a-zA-Z0-9]*$");
boolean containsSpecialChars = !pattern.matcher(str).matches();
if (containsSpecialChars) {
return false;
}
boolean containsLetter = false;
boolean containsDigit = false;
char[] chars = str.toCharArray();
int i = 0;
while (i < chars.length) {
if (Character.isLetter(chars[i])) {
containsLetter = true;
}
if (Character.isDigit(chars[i])) {
containsDigit = true;
}
i++;
if (containsDigit && containsLetter) {
return true;
}
}
return false;
}