java - 验证 String 是否为十六进制

标签 java string hex

我有一个像“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/

相关文章:

java - 是否可以对 HEX 进行签名?

c++ - C++ 中类型定义的重载运算符

javascript - Selenium Webdriver Java 无法处理 javascript :void(0), 打开新标签

java - 你能解释一下这个 Java HashMap 键冲突吗?

java - 为什么需要基础抽象工厂抽象工厂模式?

python - 在文本文件中的两个单词之间查找/替换字符串

java - 通过另一个数组对数组进行二进制搜索的最佳方法是什么?

两个字符串之间的Java正则表达式提取字符串

java - 使用 SimpleDateFormat 将字符串转换为日期会返回随机日期

hex - 如何在 Rust 中将十六进制值转换为 Base64