Вы можете использовать replaceAll или просто replaceFirst на регулярное выражение, например:
String str = " some string ";
str = str.replaceAll("\\s*$", "");//output is " some string"
Редактировать
Если вы используете StringBuilder, вы можете использовать:
private static StringBuilder rtrim(StringBuilder str, String trimStr) {
return new StringBuilder(
str.toString().replaceFirst("(" + Pattern.quote(trimStr) + ")+$", "")
);
}
Некоторые входы и выходы
" some string " + " " ==> " some string"
" some stringaaa" + "a" ==> " some string"
" some stringabab" + "ab" ==> " some string"
левый триммер (lTrim)
Для левого триммера вы можете просто изменить свое регулярное выражение на str.toString().replaceFirst("^(" + Pattern.quote(trimStr) + ")+", "")
private static StringBuilder rtrim(StringBuilder str, String trimStr) {
return new StringBuilder(
str.toString().replaceFirst("^(" + Pattern.quote(trimStr) + ")+", "")
);
}
Другое решение без регулярных выражений
правая обрезка (rTrim)
public StringBuilder rTrim(StringBuilder str, String trimStr) {
if (str != null && trimStr != null) {
int trimLen = trimStr.length();
int strLen = str.length();
if (strLen != 0 && trimLen != 0) {
while (strLen != 0 && str.substring(strLen - trimLen, strLen).equals(trimStr)) {
str = str.delete(strLen - trimLen, strLen);
strLen = str.length();
}
}
}
return str;
}
левая обрезка (lTrim)
public StringBuilder lTrim(StringBuilder str, String trimStr) {
if (str != null && trimStr != null) {
int len = trimStr.length();
if (str.length() != 0 && len != 0) {
while (str.length() != 0 && str.substring(0, len).equals(trimStr)) {
str = str.delete(0, len);
}
}
}
return str;
}