确定我的字符串是否包含java中的任何十六进制代码

时间:2017-07-04 13:34:13

标签: java regex security hex

我想确定我的字符串是否包含任何十六进制代码。

用例

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);

0 个答案:

没有答案