我想知道是否存在一种简单的方法来从StringBuilder对象中删除最后一行,而不知道最后一行中字符的数量。
示例:
示例:
我想要删除“好的,完美...”你好,你怎么样?
很好,谢谢!
好的,完美...
我想要删除“好的,完美...”你好,你怎么样?
很好,谢谢!
好的,完美...
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()); }
编辑:如果您想删除最后一个非空行,请执行以下操作:
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()); }
}
\n
(如果每行都以它结尾)。 - MaxZoom根据你的字符串构造方式和目标,如果不添加最后一行到 StringBuilder
中而是将其移除可能更容易实现。
根据您的性能要求,有几个选项:
一个选项,就像其他人已经提到的一样,是查找\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]+$
(作为Java字符串,应为"\n[^\n]+[\\s\n]+$"
)。
lastIndexOf(String str)
方法,该方法返回指定子字符串最右边出现的位置索引。 - MaxZoom