我有一个像“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,那么它不是一个有效的十六进制数字).如果字符串太大而不能适应长整型(如注释中所指出的,如果使用第一种方法将导致异常),这一点尤其有用.例:
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]+");