我有一个像“09a”这样的字符串,我需要一种方法来确认文本是否为十六进制。我发布的代码做了类似的事情,它验证一个字符串是一个十进制数。我想做同样的事情,但对于十六进制。
private static boolean isNumeric(String cadena) {
try {
Long.parseLong(cadena);
return true;
} catch (NumberFormatException nfe) {
JOptionPane.showMessageDialog(null,"Uno de los números, excede su capacidad.");
return false;
}
}
最佳答案
有一个重载的Long.parseLong
接受第二个参数,指定基数:
Long.parseLong(cadena,16);
作为替代方案,您可以遍历字符串中的字符并调用 Character.digit(c,16)
在它们上面(如果它们中的任何一个返回 -1
它不是有效的十六进制数字)。如果字符串太大而不适合 long
(如评论中指出的那样,如果使用第一种方法会导致异常),这将特别有用。示例:
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;
}
顺便说一句,我建议将“测试有效号码”和“向用户显示消息”这两个问题分开,这就是为什么我在上面的示例中简单地返回了 false
而不是通知用户第一。
最后,您可以简单地使用正则表达式:
cadena.matches("-?[0-9a-fA-F]+");
关于java - 验证 String 是否为十六进制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11424540/