Как удалить лишние пробелы в строке(StringBuffer)

Рейтинг: 4Ответов: 1Опубликовано: 21.04.2015

Как удалить лишние пробелы в строке, если она типа StringBuffer? Важно не использовать переход в String.

допустим строка:

StringBuffer str = new StringBuffer("this        is   а    test message");

должна превратиться в:

"this is a test message"

Ответы

▲ 5Принят

Пробегаем по StringBuffer и перемещаем в начало все непробельные символы. Если встречаем пробел, и он идет первым, также перемещаем его и запоминаем индекс. Все последующие пробелы игнорируем. При встрече непробельного символа сбрасываем индекс пробела.

static void removeWhiteSpaces(StringBuffer sb) {
    int end = 0;
    int spaceIndex = -1;

    for (int i = 0; i < sb.length; i++) {
        if (!Character.isWhitespace(sb.charAt(i))) {
            sb.setCharAt(end++, sb.charAt(i));
            spaceIndex = -1;
        } else if (spaceIndex < 0) {
            sb.setCharAt(end++, sb.charAt(i));
            spaceIndex = i;
        }
    }

    sb.setLength(end);
}