2011-07-16 156 views
0

我期待字符串中的字符轉換爲不同的格式逃脫類似以下,其中字母「A」正在轉換的字符串:轉換所有字符數的字符串不同轉義格式(JAVA)

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

我搜索過使用各種內置方法,但他們只是取出url編碼指定的字符(如'<')並轉義它們。我想逃避整個字符串。有什麼辦法在java中將字符串轉換爲上述格式(最好使用內置庫)?

+0

一些更多的細節會有所幫助。一些預期投入和預期產出如何? –

回答

1
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); 
} 
+0

完美!這符合我的目的。謝謝一堆。 – user847381

0

我不確定關於內置的庫,但很容易編寫一個方法來做到這一點。所有你需要做的是循環通過字符的字符串字符併爲每個字符做這樣​​的事情:

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

,然後將其追加到你製作的具有編碼的所有字符的新字符串。

0

有不太可能是現有的庫方法你想要做什麼:

  • 在每個這些例子,排出的是不必要的;例如爲字母'a'。只有在必要時才進行轉義的庫方法。
  • 允許您進行HTML/XML轉義的庫不允許您選擇特定的轉義語法(AFAIK)。
  • 你的第三個例子被錯誤地轉義了。

您需要自行實施。 (代碼是微不足道的......我假設你有能力。)