我有一个看起来像这样的方法:
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公共,也没有正则表达式。
答案 0 :(得分:4)
我会做类似下面的事情。您必须为自己的目标设备进行基准测试以确保,但我认为它肯定会更快,因为您没有为每个替换创建一个新的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();
}
答案 1 :(得分:2)
对开发人员或演出来说,你的意思是“快”吗?如果是后者,那么使用char数组&amp;自己动手吧。它会快得多,因为你可以一次性完成。
答案 2 :(得分:1)
一旦有效(上面提到评论),加快速度的最简单方法是使用StringBuffer执行替换。
但是,你测量过这个吗?这是一个瓶颈吗?我建议你在优化之前花费精力来做这件事。
答案 3 :(得分:-3)
public static String escape(String text)
{
String r = replace(text, "\", "\\");
return r;
}