Ниже приведен метод, который я использую для обрезки длинных строк в моих веб-приложениях.
«Soft» boolean
, как вы его указали, если установлено значение true
, сохранит последнее слово.
Это самый краткий способ сделать это, который я мог придумать, который использует StringBuffer, который намного эффективнее, чем воссоздание неизменяемой строки.
public static String trimString(String string, int length, boolean soft) {
if(string == null || string.trim().isEmpty()){
return string;
}
StringBuffer sb = new StringBuffer(string);
int actualLength = length - 3;
if(sb.length() > actualLength){
// -3 because we add 3 dots at the end. Returned string length has to be length including the dots.
if(!soft)
return escapeHtml(sb.insert(actualLength, "...").substring(0, actualLength+3));
else {
int endIndex = sb.indexOf(" ",actualLength);
return escapeHtml(sb.insert(endIndex,"...").substring(0, endIndex+3));
}
}
return string;
}
Обновление
Я изменил код, чтобы ...
добавлялся в StringBuffer, чтобы неявно создавать ненужные String
, что является медленным и расточительным.
Примечание: escapeHtml
- это статический импорт из Apache Commons:
import static org.apache.commons.lang.StringEscapeUtils.escapeHtml;
Вы можете удалить его, и код должен работать так же.