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