我想知道在不知道最后一行字符数量的情况下,是否存在从StringBuilder对象中删除最后一行的简单方法。
示例:
你好,你好? 很好谢谢! 好吧完美..。
我想去掉“好,完美.”
发布于 2015-06-18 14:05:10
StringBuilder sb = new StringBuilder("Hello, how are you?\nFine thanks!\nOk, Perfect...");
int last = sb.lastIndexOf("\n");
if (last >= 0) { sb.delete(last, sb.length()); }
http://ideone.com/9k8Tcj
编辑:如果要删除最后一个非空行,请执行。
StringBuilder sb = new StringBuilder(
"Hello, how are you?\nFine thanks!\nOk, Perfect...\n\n");
if (sb.length() > 0) {
int last, prev = sb.length() - 1;
while ((last = sb.lastIndexOf("\n", prev)) == prev) { prev = last - 1; }
if (last >= 0) { sb.delete(last, sb.length()); }
}
http://ideone.com/AlzQe0
发布于 2015-06-18 14:09:36
取决于您的String是如何构造的,以及您的目标是什么,不向StringBuilder
添加最后一行而不是删除它可能更容易。
发布于 2015-06-18 14:39:53
根据您的性能要求,有几个选项:
正如其他人已经提到的,一个选项是查找\n
的最后一个索引,如果它是最后一个字符,递归地查找下一个到最后一个索引等等,直到您到达最后一个非空行为止。
另一种选择是使用正则表达式查找以下内容:
StringBuilder sb = new StringBuilder("Hello, how are you?\nFine thanks!\nOk, Perfect...\n\n");
Pattern p = Pattern.compile("\n[^\n]+\n+$");
Matcher m= p.matcher( sb );
//if there is a last line that matches our requirements
if( m.find() ) {
sb.delete( m.start( 0 ), m.end( 0 ) );
}
如果您认为空格为空,则可以将表达式更改为\n[^\n]+[\s\n]+$
(作为"\n[^\n]+[\\s\n]+$"
的Java )。
https://stackoverflow.com/questions/30917515
复制相似问题