check hex string仅包含十六进制有界值

时间:2014-02-24 15:32:43

标签: java string hex

如何检查给定的十六进制字符串仅包含十六进制数。是否有任何简单的方法或任何Java库相同?我有像“01AF”的字符串,我必须检查字符串只包含十六进制范围值,因为我现在正在做的是采取字符串,然后拆分字符串和然后将其转换为适当的格式,然后检查该值。是否有任何简单的方法?

3 个答案:

答案 0 :(得分:3)

try
{
    String hex = "AAA"
    int value = Integer.parseInt(hex, 16);  
    System.out.println("valid hex);
 }
 catch(NumberFormatException nfe)
 {
    // not a valid hex
    System.out.println("not a valid hex);
 }

如果十六进制字符串无效,则会抛出NumberFormatException。

请参阅文档here

答案 1 :(得分:3)

如果您想检查字符串是否仅包含0-9,a-h或A-H,您可以尝试使用

yourString.matches("[0-9a-fA-F]+");

要优化它,您可以提前创建Pattern

Pattern p = Pattern.compile("[0-9a-fA-F]+");

以后再重复使用

Matcher m = p.matcher(yourData);
if (m.matches())

甚至可以使用

重用Matcher个实例
m.reset(newString);
if (m.matches())

答案 2 :(得分:0)

String str作为输入字符串:

选项#1:

public static boolean isHex(String str)
{
    try
    {
        int val = Integer.parseInt(str,16);
    }
    catch (Exception e)
    {
        return false;
    }
    return true;
}

选项#2:

private static boolean[] hash = new boolean[Character.MAX_VALUE];
static // Runs once
{
    for (int i=0; i<hash.length; i++)
        hash[i] = false;
    for (char c : "0123456789ABCDEFabcdef".toCharArray())
        hash[c] = true;
}
public static boolean isHex(String str)
{
    for (char c : str.toCharArray())
        if (!hash[c])
            return false;
    return true;
}