在我的程序中,我需要将固定大小的char[]
转换为修剪的字符串(不从数组中取出空格)。目前我做new String(array).trim()
,但如果可能,我想避免trim()
。有什么建议怎么做得更好?
最诚挚的问候。
答案 0 :(得分:7)
但我想尽可能避免修剪()。有什么建议如何做得更好?
不要寻找任何替代方案,trim()
足够智能,内部使用substring()
方法。这很快。
任何基于循环或基于注册的解决方案都会给您带来困难。
答案 1 :(得分:3)
如果你使用 trim 源代码并稍微重写一下,你可以删除未使用的(在你的情况下)子串方法:
修剪源代码:
public String trim() {
int len = value.length;
int st = 0;
char[] val = value; /* avoid getfield opcode */
while ((st < len) && (val[st] <= ' ')) {
st++;
}
while ((st < len) && (val[len - 1] <= ' ')) {
len--;
}
return ((st > 0) || (len < value.length)) ? substring(st, len) : this;
}
测试:
public static char[] value = new char[]{' ', ' ', 't', 'w', 's', ' ', ' ', ' '};
public static void main(String[] args) {
normal();
optimized();
}
public static void normal() {
long start = System.nanoTime();
String s = new String(value).trim();
System.out.println("normal : '" + s + "' " + (System.nanoTime() - start) + "ns");
}
public static void optimized() {
long start = System.nanoTime();
int len = value.length;
int st = 0;
char[] val = value; /* avoid getfield opcode */
while ((st < len) && (val[st] <= ' ')) {
st++;
}
while ((st < len) && (val[len - 1] <= ' ')) {
len--;
}
String s = new String(value, st, len - st);
System.out.println("optimized: '" + s + "' " + (System.nanoTime() - start) + "ns");
}
输出:
run:
normal : 'tws' 41656ns
optimized: 'tws' 7546ns
所以,你的新剪裁字符串的版本会为你节省一些时间。