将字符串中的所有字符转换为不同的转义格式(Java)



我希望将字符串中的字符转换为不同的转义格式,如以下所示,其中字母'a'是正在转换的字符串:

hex-url: %61
hex-html: a
decimal-html: &#97

我已经搜索了各种内置方法,但它们只是取出url编码指定的字符(如'<')并转义它们。我想转义整个字符串。是否有任何方法将字符串转换为java中的上述格式(最好使用内置库)?

public class StringEncoders
{
    static public void main(String[] args)
    {
        System.out.println("hex-url: " + hexUrlEncode("a"));
        System.out.println("hex-html: " + hexHtmlEncode("a"));
        System.out.println("decimal-html: " + decimalHtmlEncode("a"));
    }
    static public String hexUrlEncode(String str)   {
        return encode(str, hexUrlEncoder);
    }
    static public String hexHtmlEncode(String str)  {
        return encode(str, hexHtmlEncoder);
    }
    static public String decimalHtmlEncode(String str)  {
        return encode(str, decimalHtmlEncoder);
    }
    static private String encode(String str, CharEncoder encoder)
    {
        StringBuilder buff = new StringBuilder();
        for ( int i = 0; i < str.length(); i++)
            encoder.encode(str.charAt(i), buff);
        return ""+buff;
    }
    private static class CharEncoder
    {
        String prefix, suffix;
        int radix;
        public CharEncoder(String prefix, String suffix, int radix)        {
            this.prefix = prefix;
            this.suffix = suffix;
            this.radix = radix;
        }
        void encode(char c, StringBuilder buff)     {
            buff.append(prefix).append(Integer.toString(c, radix)).append(suffix);
        }
    }
    static final CharEncoder hexUrlEncoder = new CharEncoder("%","",16);
    static final CharEncoder hexHtmlEncoder = new CharEncoder("&#x",";",16);
    static final CharEncoder decimalHtmlEncoder = new CharEncoder("&#",";",10); 
}

我对内置库不太确定,但是自己编写一个方法来实现这一点非常容易。您所需要做的就是一个字符一个字符地遍历字符串,对于每个字符执行如下操作:

"&#"+Integer.toHexString(character)+";";

,然后将其附加到您正在创建的包含所有字符编码的新字符串。

不太可能有一个现有的库方法来做你想要的:

  • 在这些例子中,转义是不必要的;例如字母"a"。执行转义的库方法只在必要时执行。
  • 允许你进行HTML/XML转义的库不允许你选择特定的转义语法(AFAIK)。
  • 你的第三个例子没有正确转义。

您需要自己实现它。(代码是微不足道的…我认为你是有能力的。

最新更新