我希望将字符串中的字符转换为不同的转义格式,如以下所示,其中字母'a'是正在转换的字符串:
hex-url: %61
hex-html: a
decimal-html: a
我已经搜索了各种内置方法,但它们只是取出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)。
- 你的第三个例子没有正确转义。
您需要自己实现它。(代码是微不足道的…我认为你是有能力的。