在我的程序中,我将2个字符串传递给一些方法进行评估。该方法必须获得这些字符串的Class
类(如果它是一个真正的类名!)并比较它们的共性。字符串可以有两种类型的输入:
- Java API中的类名,如" Java .lang. byte "," Java .lang. byte "。数学"等。
- 任何其他字符串,如"some string", "hello"等
在我的方法中得到这两个字符串我怎么能理解它是类型1还是类型2所以不得到Exception
呢?
我怀疑是否有一个完美的条件来检查这一点,因为"Hello"是一个和java.lang.Byte一样好的有效类名。您可以做的是根据有效的java标识符http://docs.oracle.com/javase/specs/jls/se7/html/jls-3.html#jls-3.8
验证字符串所以有两个检查:1. 检查有效的java类名。2. 尝试class. forname()来加载类。如果类在类路径中不存在,则会通过ClassNotFoundException。
使用了一个简单的正则表达式,我发现在其他一些链接验证类名
String regexForBasicClassNameValidation = "([a-zA-Z_$][a-zA-Z\d_$]*\.)*[a-zA-Z_$][a-zA-Z\d_$]*" ;
if(inputString.matches(regexForBasicClassNameValidation))
{
try {
Class.forName(inputString) ;
System.out.println("Valid class name");
} catch (ClassNotFoundException e) {
System.out.println("Invalid Class name or class not found in classpath ");
}
}
else
{
System.out.println("Not a class name");
}
JavaDoc for class . forname ()
Class clazz = null;
try
{
clazz = Class.forName(myString);
}
catch (ClassNotFoundException e)
{
System.out.println("This isn't a class");
}