Удаление пробелов из строк в Java - PullRequest
633 голосов
/ 28 марта 2011

У меня есть такая строка:

mysz = "name=john age=13 year=2001";

Я хочу удалить пробелы в строке. Я попытался trim(), но это удаляет только пробелы до и после всей строки. Я также пытался replaceAll("\\W", ""), но затем = также удаляется.

Как мне получить строку с:

mysz2 = "name=johnage=13year=2001"

Ответы [ 31 ]

1231 голосов
/ 28 марта 2011

st.replaceAll("\\s+","") удаляет все пробелы и невидимые символы (например, табуляция, \n).


st.replaceAll("\\s+","") и st.replaceAll("\\s","") дают одинаковый результат.

Второе регулярное выражение на 20% быстрее первого, но по мере увеличения числа последовательных пробелов первое работает лучше второго.


Назначьте значение переменной, если она не используетсянапрямую:

st = st.replaceAll("\\s+","")
235 голосов
/ 28 марта 2011
replaceAll("\\s","")

\w = Все, что является символом слова

\W = Все, что не является символом слова (включая знаки препинания и т. Д.)

\s = Все, что является пробелом (включая пробел, символы табуляции и т. Д.)

\S = Все, что не является пробелом (включая буквы и цифры, а также знаки препинания и т. Д.)

(Редактировать: Как указывалось, вам нужно избежать обратной косой черты, если вы хотите, чтобы \s достиг движка регулярных выражений, в результате чего \\s.)

97 голосов
/ 16 апреля 2013

Самый правильный ответ на вопрос:

String mysz2 = mysz.replaceAll("\\s","");

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

(Опытные Java-разработчики могут сказать: «Конечно, вы не можете изменить строку», но целевая аудитория по этому вопросу может и не знать об этом.)

55 голосов
/ 28 марта 2011

Как насчет replaceAll("\\s", "").См. здесь .

35 голосов
/ 20 июля 2014

Одним из способов обработки строковых манипуляций является StringUtils из Apache Commons.

String withoutWhitespace = StringUtils.deleteWhitespace(whitespaces);

Вы можете найти его здесь .commons-lang включает в себя намного больше и хорошо поддерживается.

33 голосов
/ 14 ноября 2014

Если вам также нужно удалить неразрывные пробелы, вы можете обновить код следующим образом:

st.replaceAll("[\\s|\\u00A0]+", "");
29 голосов
/ 25 января 2013

Если вы предпочитаете вспомогательные классы регулярным выражениям, в StringUtils в Spring Framework есть метод trimAllWhitespace (String) .

25 голосов
/ 28 марта 2011

Вы уже получили правильный ответ от Гурселя Коджа, но я верю, что есть хороший шанс, что вы не хотите этого делать.Как насчет парсинга значений ключа вместо этого?

import java.util.Enumeration;
import java.util.Hashtable;

class SplitIt {
  public static void main(String args[])  {

    String person = "name=john age=13 year=2001";

    for (String p : person.split("\\s")) {
      String[] keyValue = p.split("=");
      System.out.println(keyValue[0] + " = " + keyValue[1]);
    }
  }
}

вывод:
имя = Джон
возраст = 13
год = 2001

20 голосов
/ 15 июля 2013

Вы должны использовать

s.replaceAll("\\s+", "");

вместо:

s.replaceAll("\\s", "");

Таким образом, он будет работать с более чем одним пробелом между каждой строкой. Знак + в приведенном выше регулярном выражении означает «один или несколько \ s»

8 голосов
/ 20 октября 2016

Самый простой способ сделать это - использовать класс org.apache.commons.lang3.StringUtils библиотеки commons-lang3, такой как, например, "commons-lang3-3.1.jar".

Использовать статический метод "StringUtils.deleteWhitespace(String str)" для вводастрока & он вернет вам строку после удаления всех пробелов из него.Я попробовал ваш пример строки "name=john age=13 year=2001", и он вернул мне именно ту строку, которую вы хотели - "name=johnage=13year=2001".Надеюсь, это поможет.

...