簡體   English   中英

在JavaME中轉義String的最快方法

[英]Fastest way to escape a String in JavaME

我有一個看起來像這樣的方法:

public static String escape(String text)
{
   String r = replace(text, "\\", "\\\\");
   r = replace(r, "\r", "\\r");
   r = replace(r, "\b", "\\b");
   r = replace(r, "\t", "\\t");
   r = replace(r, "\n", "\\n");
   r = replace(r, "\f", "\\f");
   return r;
}

是否有更快,更殘酷的方式來做到這一點,如果是這樣的話會是什么樣子?

請注意,這是J2ME,因此沒有Apache公共,也沒有正則表達式。

我會做類似下面的事情。 您必須為自己的目標設備進行基准測試以確保,但我認為它肯定會更快,因為您沒有為每個替換創建一個新的String對象。 而且,從堆的角度來看,創建垃圾會更好,這可能有助於堆碎片,也可能沒有幫助。

public static String escape(String text) { 
    if(text == null) {
        return null;
    }

    int numChars = text.length();
    char ch;
    StringBuffer sb = new StringBuffer();
    for(int i = 0; i < numChars; i++) {
        ch = text.charAt(i);

        switch(ch) {
            case '\\':  { sb.append("\\\\"); break; }
            case '\r':  { sb.append("\\r"); break; }
            case '\b':  { sb.append("\\b"); break; }
            case '\t':  { sb.append("\\t"); break; }
            case '\n':  { sb.append("\\n"); break; }
            case '\f':  { sb.append("\\f"); break; }
            default: {
                sb.append(ch);
                break;
            }
        }
    }
    return sb.toString();
}

你的意思是對開發人員或表現“快”嗎? 如果是后者,那么使用char數組並自己完成。 它會快得多,因為你可以一次完成它。

一旦它起作用(上面的注釋),加速它的最簡單方法是使用StringBuffer執行替換。

但是 ,你測量過這個嗎? 這是一個瓶頸嗎? 我建議你在優化之前花費精力來做這件事。

嗯,你不能只是使用

public static String escape(String text)
{
   String r = replace(text, "\", "\\");
   return r;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM