Ваше оригинальное регулярное выражение не сработало, потому что вы забыли избежать обратной косой черты. Это должно сделать то, что вы изначально пытались сделать:
string.replaceAll("\\s{4}", " ")
РЕДАКТИРОВАТЬ : Я не осознавал, что вы на самом деле не забыли избежать обратной косой черты, и что переполнение стека "съело" одну из ваших обратных косых черт, как Алан Мур указано в одном из комментариев к этому ответу (единственное различие между "\ s" и "\\s
" - это обратные метки вокруг текста). При этом, мой первоначальный ответ не очень поможет вам, так что ...
Чтобы это было эффективным, вы должны что-то сделать с выводом из String # replaceAll , так как он возвращает новую строку вместо изменения существующей ( Строки являются неизменяемыми , а Уильям Брендель отметил в своем комментарии к вашему вопросу).
string = string.replaceAll("\\s{4}", " ")
Поскольку этот ответ на самом деле не добавляет ничего ценного, вместо того, чтобы удалить его, я делаю его вики сообщества.