我想确定我的字符串是否包含任何十六进制代码。
用例
String input1 = "hello check this input ";
String input2 = "hello check 0x740x680x690x73 input";
String input3 = "0x680x650x6c0x6c0x6f0x200x630x680x650x630x6b0x200x740x680x690x730x200x690x6e0x700x750x74";
isContainHex(input1)应返回false
isContainHex(input2)应该返回true
isContainHex(input3)应该返回true
我试过了
String input2 = "hello check 0x740x680x690x73 input";
if(input2.contains("0x") || input2.contains("\\x"))
{
System.out.println("string contains hex");
}
我能找到十六进制但是, 如果我的输入包含像
这样的十六进制String input4 = "h68h65h6ch6ch6f check this input ";
我无法检查input4.contains("h")
任何人都有解决方案吗?
是否有任何标准库可供我使用?
更新
我已经编写了以下代码,但它运作良好,但需要时间。
现在可以优化
try
{
if (input != null && input.trim().length() > 0)
{
String originalHex = null;
StringBuilder output = new StringBuilder();
String inputArray[] = null;
if (StringUtils.countMatches(input, "\\x") > 3)
{
originalHex = input.substring(input.indexOf("\\x"), input.lastIndexOf("\\x", input.length()) + 4);
inputArray = input.split("\\Q\\x\\E");
}
else if (StringUtils.countMatches(input, "0x") > 3)
{
originalHex = input.substring(input.indexOf("0x"), input.lastIndexOf("0x", input.length()) + 4);
inputArray = input.split("0x");
}
if (inputArray != null && inputArray.length > 0)
{
for (String str: inputArray)
{
int strLength = str.trim().length();
if (strLength == 2)
{
output.append((char)Integer.parseInt(str, 16));
}
else if (strLength > 2)
{
if (strLength % 2 != 0)
{
strLength = strLength - 1;
}
for (int i = 0; i < strLength; i += 2)
{
String val = str.substring(i, i+2);
if (val.matches("\\d+"))
{
output.append((char)Integer.parseInt(val, 16));
}
}
}
}
input = input.replaceAll("\\Q" + originalHex + "\\E", output.toString());
}
}
}
catch(Exception ex)
{
ex.printStackTrace();
}
syso(input);