編集: 後世のためにこの回答を残しますが、Keith Randall の O(n) ソリューションははるかに優れています。
遠端から作業する方が効率的であることに気付くかもしれません。そのようにすると、最初の文字を削除するまでに、後で空白をコピーすることはありません。
また、データに複数の空白文字が一緒に含まれる傾向がある場合は、それを見つけdelete
てdeleteCharAt
. 次のようなものです:
private static StringBuilder removeBlankSpace(StringBuilder sb) {
int currentEnd = -1;
for(int i = sb.length() - 1; i >= 0; i--) {
if (Character.isWhitespace(sb.charAt(i))) {
if (currentEnd == -1) {
currentEnd = i + 1;
}
} else {
// Moved from whitespace to non-whitespace
if (currentEnd != -1) {
sb.delete(i + 1, currentEnd);
currentEnd = -1;
}
}
}
// All leading whitespace
if (currentEnd != -1) {
sb.delete(0, currentEnd);
}
return sb;
}