将char []转换为trimmed String的最快方法

时间:2014-08-20 08:03:25

标签: java string trim

在我的程序中,我需要将固定大小的char[]转换为修剪的字符串(不从数组中取出空格)。目前我做new String(array).trim(),但如果可能,我想避免trim()。有什么建议怎么做得更好? 最诚挚的问候。

2 个答案:

答案 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

所以,你的新剪裁字符串的版本会为你节省一些时间。