有一个重载的
Long.parseLong接受第二个参数,指定基数:
Long.parseLong(cadena,16);
或者,您可以遍历字符串中的字符,并对其调用Character.digit(c,16)(如果任何一个返回-1,那么它不是一个有效的十六进制数字).如果字符串太大而不能适应长整型(如注释中所指出的,如果使用第一种方法将导致异常),这一点尤其有用.例:
private static boolean isNumeric(String cadena) {
if ( cadena.length() == 0 ||
(cadena.charAt(0) != '-' && Character.digit(cadena.charAt(0),16) == -1))
return false;
if ( cadena.length() == 1 && cadena.charAt(0) == '-' )
return false;
for ( int i = 1 ; i < cadena.length() ; i++ )
if ( Character.digit(cadena.charAt(i),16) == -1 )
return false;
return true;
}
BTW,我建议分开“测试一个有效的数字”和“向用户显示一个消息”的关注,这就是为什么我只是在上面的例子中返回false,而不是先通知用户.
最后,您可以使用正则表达式:
cadena.matches("-?[0-9a-fA-F]+");