专栏名称: ImportNew
伯乐在线旗下账号,专注Java技术分享,包括Java基础技术、进阶技能、架构设计和Java技术领域动态等。
目录
相关文章推荐
51好读  ›  专栏  ›  ImportNew

写程序很难之去除字符串的空白字符

ImportNew  · 公众号  · Java  · 2017-01-06 20:18

正文

请到「今天看啥」查看全文


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复制部分内存







请到「今天看啥」查看全文