给定一个java.lang.String实例,我想验证它不包含任何非ASCII字母数字的unicode字符。例如该字符串应限于[A-Za-z0-9。]。我现在正在做的事情是非常低效的:
import org.apache.commons.lang.CharUtils;
String s = ...;
char[] ch = s.toCharArray();
for( int i=0; i<ch.length; i++)
{
if( ! CharUtils.isAsciiAlphanumeric( ch[ i ] )
throw new InvalidInput( ch[i] + " is invalid" );
}
有没有更好的方法来解决这个问题?
答案 0 :(得分:3)
您可以使用
input.matches("[A-Za-z0-9.]+")
答案 1 :(得分:1)
是的,有更好的方法来解决这个问题。您已经编写了模式,那么为什么不使用正则表达式来验证它?您也可以使用一般性错误消息来说明“输入包含无效字符(有效字符为a-z和0-9)”这一行,而不是抛出包含无效字符的异常。
答案 2 :(得分:0)
试试这个:
private boolean isBasicLatin(String input)
{
for (char c : input.toCharArray())
{
if (!UnicodeBlock.BASIC_LATIN.equals(UnicodeBlock.of(c)))
{
return false;
}
}
return true;
}