gpt4 book ai didi

java - String.trim() 比 String.replace() 更快吗?

转载 作者:行者123 更新时间:2023-12-02 07:28:28 26 4
gpt4 key购买 nike

假设有一个像“world”这样的字符串。该字符串只有前端和尾部有空格。 trim()replace() 更快吗?

我使用过一次替换,我的导师说不要使用它,因为 trim() 可能更快。

如果不是,trim()replace()有什么优势?

最佳答案

如果我们看一下source code对于方法:

replace() :

 public String replace(CharSequence target, CharSequence replacement) {
String tgtStr = target.toString();
String replStr = replacement.toString();
int j = indexOf(tgtStr);
if (j < 0) {
return this;
}
int tgtLen = tgtStr.length();
int tgtLen1 = Math.max(tgtLen, 1);
int thisLen = length();
int newLenHint = thisLen - tgtLen + replStr.length();
if (newLenHint < 0) {
throw new OutOfMemoryError();
}
StringBuilder sb = new StringBuilder(newLenHint);
int i = 0;
do {
sb.append(this, i, j).append(replStr);
i = j + tgtLen;
} while (j < thisLen && (j = indexOf(tgtStr, j + tgtLen1)) > 0);
return sb.append(this, i, thisLen).toString()
}

VS 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;
}

如您所见,replace() 调用多个其他方法并迭代整个 String,而 trim() 只是迭代String 的开头和结尾,直到该字符不是空格。因此,就尝试删除单词前后的空格而言,trim() 效率更高。

<小时/>

我们可以对此运行一些基准测试:

public static void main(String[] args) {
long testStartTime = System.nanoTime();;
trimTest();
long trimTestTime = System.nanoTime() - testStartTime;
testStartTime = System.nanoTime();
replaceTest();
long replaceTime = System.nanoTime() - testStartTime;
System.out.println("Time for trim(): " + trimTestTime);
System.out.println("Time for replace(): " + replaceTime);
}

public static void trimTest() {
for(int i = 0; i < 1000000; i ++) {
new String(" string ").trim();
}
}
public static void replaceTest() {
for(int i = 0; i < 1000000; i ++) {
new String(" string ").replace(" ", "");
}
}

输出:

Time for trim(): 53303903
Time for replace(): 485536597
//432,232,694 difference

关于java - String.trim() 比 String.replace() 更快吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51110114/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com