8

Удаление пробелов из строк в Java

1

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

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

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

Как я могу получить строку следующего вида:

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

5 ответ(ов)

15

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


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

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


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

st = st.replaceAll("\\s+", "");
2

Для того чтобы удалить все пробелы из строки в Java с использованием регулярных выражений, вы можете воспользоваться методом replaceAll. Он принимает два параметра: первый — это регулярное выражение, а второй — строка, которой нужно заменить найденные совпадения. В вашем случае код будет выглядеть так:

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

Здесь \\s представляет собой регулярное выражение, которое соответствует любому символу пробела (включая пробелы и табуляции). Благодаря двойному обратному слэшу это выражение корректно интерпретируется движком регулярных выражений Java.

Для сравнения:

  • \w = символ, являющийся буквой или цифровым знаком.
  • \W = символ, не являющийся буквой или цифрой (включая знаки препинания и пробелы).
  • \s = символ, являющийся пробелом (включая пробелы, табуляции и другие пробельные символы).
  • \S = символ, не являющийся пробелом (включая буквы, цифры и знаки препинания).

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

1

Наиболее правильный ответ на поставленный вопрос выглядит так:

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

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

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

0

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

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

вместо:

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

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

-- \s = любой символ пробела (включая пробелы, табуляции и т.д.). Почему мы здесь используем +? Это необходимо для того, чтобы удалить все последовательности пробелов, а не только одиночные пробелы. Например, если у вас есть строка с двумя или больше пробелами между словами, то s.replaceAll("\\s", "") удалит только одиночные пробелы, оставляя лишние. Используя \\s+, вы удалите все пробелы и объедините слова, что делает строку более чистой и читаемой.

0

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

st.replaceAll("[\\s|\\u00A0]+", "");

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

Чтобы ответить на вопрос, пожалуйста, войдите или зарегистрируйтесь