2015-06-18 104 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]+$")。

相關問題