【发布时间】:2012-01-05 02:30:21
【问题描述】:
我需要一个可以告诉我字符串是否包含非字母数字字符的方法。
例如,如果字符串是“abcdef?”或“abcdefà”,该方法必须返回 true。
【问题讨论】:
标签: java string character alphanumeric
我需要一个可以告诉我字符串是否包含非字母数字字符的方法。
例如,如果字符串是“abcdef?”或“abcdefà”,该方法必须返回 true。
【问题讨论】:
标签: java string character alphanumeric
您必须遍历字符串中的每个字符并检查Character.isDigit(char); 或Character.isletter(char);
或者,您可以使用正则表达式。
【讨论】:
如果您可以使用 Apache Commons 库,那么 Commons-Lang StringUtils 有一个名为 isAlphanumeric() 的方法可以满足您的需求。
【讨论】:
使用 Apache Commons 语言:
!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"); 如果str 只包含字母则返回true。
一种方法是使用 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) 有他自己对“特殊”的定义。
String.matches(...) 在 Java 中检查正则表达式是否匹配 整个 字符串。
boolean hasNonAlpha = ! … ^[A-Za-z0-9 ]*$
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;
}
【讨论】:
使用此函数检查字符串是否为字母数字:
public boolean isAlphanumeric(String str)
{
char[] charArray = str.toCharArray();
for(char c:charArray)
{
if (!Character.isLetterOrDigit(c))
return false;
}
return true;
}
它省去了导入外部库的麻烦,并且如果您以后希望对字符串执行不同的验证检查,可以轻松修改代码。
【讨论】:
虽然它不适用于数字,但您可以检查小写和大写的值是否相同,对于非字母字符它们将相同,您应该在此之前检查数字以获得更好的可用性
【讨论】: