2015-06-18 2 views
3

Я хочу знать, существует ли простой метод для удаления последней строки из объекта StringBuilder, не зная количества символов в последней строке.Удалить последнюю строку из StringBuilder, не зная числа символов

Пример:

Здравствуйте, как поживаете?
Прекрасное спасибо!
Ok, Совершенная ...

Я хочу удалить "Ok, идеально подходит ..."

+0

что вы подразумеваете под последней строкой? Можете ли вы поделиться образцом String и показать, какую часть вы хотите удалить? –

+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

EDIT: Если вы хотите удалить последнюю Некоммерческие -пустая линия do

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, которая была бы "\n[^\n]+[\\s\n]+$").

Смежные вопросы