2015-06-18 64 views
3

我想知道是否存在一个简单的方法,用于在不知道最后一行中的字符数的情况下从StringBuilder对象中删除最后一行。从StringBuilder中删除最后一行而不知道字符数

例子:

你好,你怎么样?
非常感谢!
好吧,完美...

我想删除 “好吧,完美......”

+0

你最后一行是什么意思?你能分享一个样本字符串,并显示你想删除的部分? –

+0

使用'lastIndexOf(String str)',它返回指定子字符串最右边出现的字符串中的索引。 – MaxZoom

回答

9
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

+1

这并不会删除最后一行,而是最后一行'\ n'(如果每行都以它结尾) – MaxZoom

+0

删除最后一行\ n到结尾的所有内容...... – ericbn

+0

而且\ n可能位于结束或根本没有在字符串中找到。 – MaxZoom

2

根据您的字符串的构建方式和目标是什么,可能不会将最后一行添加到StringBuilder而不是删除它。

1

根据您的性能需求有几个选项:

一种选择,因为已经被其他人所说,是要查找的\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 String的,这将是"\n[^\n]+[\\s\n]+$")。

相关问题