正文
return str;
}
StringBuilder sb = new StringBuilder(str);
int index = 0;
while (sb.length() > index) {
if (Character.isWhitespace(sb.charAt(index))) {
sb.deleteCharAt(index);
}
else {
index++;
}
}
return sb.toString();
}
看起来,没有什么问题,但是程序员的直觉:deleteCharAt函数是怎么实现的?应该不会有什么高效的算法可以实现这样的。
果然,实现代码如下:
public AbstractStringBuilder deleteCharAt(int index) {
if ((index = count))
throw new StringIndexOutOfBoundsException(index);
System.arraycopy(value, index+1, value, index, count-index-1);
count--;
return this;
}
显然,过多地调用System.arraycopy会有性能问题。
方式三:改为调用StringBuilder.append 函数
static public String myTrimAllWhitespace(String str) {
if (str != null) {
int len = str.length();
if (len > 0) {
StringBuilder sb = new StringBuilder(len);
for (int i = 0; i
char c = str.charAt(i);
if (!Character.isWhitespace(c)) {
sb.append(c);
}
}
return sb.toString();
}
}
return str;
}
这个是最开始的思路。实际测试了下,发现大部分情况上,要比方式二效率高。
但是在某些情况,比如”aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaa”,这种只有一个空白字符的,效率要慢。
方式四:结合二,三,只用System.arraycopy复制部分内存