Java, как заменить 2 или более пробелов одним пробелом в строке и удалить начальные и конечные пробелы - PullRequest
237 голосов
/ 29 мая 2010

Ищете быстрый и простой способ изменить эту строку на Java

" hello     there   "

к чему-то похожему

"hello there"

, где я заменяю все эти несколько пробелов одним пробелом, за исключением того, что я также хочу, чтобы пропали один или несколько пробелов в начале строки.

Нечто подобное заставляет меня там отчасти

String mytext = " hello     there   ";
mytext = mytext.replaceAll("( )+", " ");

но не совсем.

Ответы [ 22 ]

406 голосов
/ 29 мая 2010

Попробуйте это:

String after = before.trim().replaceAll(" +", " ");

Смотри также


Нет trim() регулярное выражение

Также возможно сделать это только с одним replaceAll, но это гораздо менее читабельно, чем решение trim(). Тем не менее, здесь приведено только для того, чтобы показать, что может сделать регулярное выражение:

    String[] tests = {
        "  x  ",          // [x]
        "  1   2   3  ",  // [1 2 3]
        "",               // []
        "   ",            // []
    };
    for (String test : tests) {
        System.out.format("[%s]%n",
            test.replaceAll("^ +| +$|( )+", "$1")
        );
    }

Есть 3 альтернативы:

  • ^_+: любая последовательность пробелов в начале строки
    • Сопоставьте и замените на $1, который захватывает пустую строку
  • _+$: любая последовательность пробелов в конце строки
    • Подберите и замените на $1, который захватывает пустую строку
  • (_)+: любая последовательность пробелов, которая не соответствует ни одной из вышеперечисленных, то есть она находится в середине
    • Подберите и замените на $1, который захватывает один пробел

Смотри также

134 голосов
/ 09 декабря 2013

Вам просто нужно:

replaceAll("\\s{2,}", " ").trim();

где вы сопоставляете один или несколько пробелов и заменяете их одним пробелом, а затем обрезаете пробелы в начале и в конце (вы можете фактически инвертировать, сначала обрезав, а затем сопоставив, чтобы сделать регулярное выражение более быстрым, как кто-то указал). *

Чтобы проверить это быстро, попробуйте:

System.out.println(new String(" hello     there   ").trim().replaceAll("\\s{2,}", " "));

и он вернется:

"hello there"
38 голосов
/ 02 августа 2015

Используйте Apache commons StringUtils.normalizeSpace(String str) метод. Смотри документы здесь

16 голосов
/ 10 ноября 2015

Это прекрасно сработало для меня: sValue = sValue.trim().replaceAll("\\s+", " ");

13 голосов
/ 29 мая 2010

Чтобы исключить пробелы в начале и в конце строки, используйте метод String#trim(). А затем используйте свой mytext.replaceAll("( )+", " ").

12 голосов
/ 29 мая 2010

Вы можете сначала использовать String.trim(), а затем применить команду regex replace к результату.

10 голосов
/ 15 декабря 2017
"[ ]{2,}"

Это будет соответствовать более одного пробела.

String mytext = " hello     there   ";
//without trim -> " hello there"
//with trim -> "hello there"
mytext = mytext.trim().replaceAll("[ ]{2,}", " ");
System.out.println(mytext);

ВЫВОД:

hello there
8 голосов
/ 28 марта 2017

Попробуйте это.

Пример кода

String str = " hello     there   ";
System.out.println(str.replaceAll("( +)"," ").trim());

OUTPUT

hello there

Сначала он заменит все пробелы одним пробелом. Чем мы должны сделать обрезку String, так как Начало String и Конец String заменят все пробелы одним пробелом, если String имеет пробелы в начале String и Конце String Так что нам нужно их обрезать. Чем вы получаете желаемый String.

3 голосов
/ 02 июня 2018

отделка ()

Удаляет только начальные и конечные пробелы.

Из Java Doc, Msgstr "Возвращает строку, значением которой является эта строка, с удалением всех начальных и конечных пробелов."

System.out.println(" D ev  Dum my ".trim());

"D ev Dum my"

replace (), replaceAll ()

Заменяет все пустые строки в слове,

System.out.println(" D ev  Dum my ".replace(" ",""));

System.out.println(" D ev  Dum my ".replaceAll(" ",""));

System.out.println(" D ev  Dum my ".replaceAll("\\s+",""));

Выход:

"DevDummy"

"DevDummy"

"DevDummy"

Примечание: "\ s +" - это регулярное выражение, похожее на символ пробела.

Ссылка: https://www.codedjava.com/2018/06/replace-all-spaces-in-string-trim.html

3 голосов
/ 06 марта 2015

Вы также можете использовать lookarounds.

test.replaceAll("^ +| +$|(?<= ) ", "");

OR

test.replaceAll("^ +| +$| (?= )", "")

<space>(?= ) соответствует пробелу, за которым следует еще один пробел. Таким образом, в последовательных пробелах он будет соответствовать всем пробелам, кроме последнего, поскольку за ним не следует пробел. Это оставит вам один пробел для последовательных пробелов после операции удаления.

Пример:

    String[] tests = {
            "  x  ",          // [x]
            "  1   2   3  ",  // [1 2 3]
            "",               // []
            "   ",            // []
        };
        for (String test : tests) {
            System.out.format("[%s]%n",
                test.replaceAll("^ +| +$| (?= )", "")
            );
        }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...