Java stringbuilder удалить пробелы

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

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

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

как насчет, если строка на самом деле = «». Все, что делает trims () — очищает пустую строку, как я упоминал? @zyamat?

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

30 ответов

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

st.replaceAll(«\\s+»,»») и st.replaceAll(«\\s»,»») дают тот же результат.

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

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

Я хотел бы отметить, что эти два регулярных выражения будут давать разные результаты, если вы хотите заменить все пробелы одним пробелом (или другим набором символов). Если у вас есть последовательные пробелы, с помощью \\ s он заменит каждый символ пробела указанными символами. Учитывая \\ s +, он заменит каждый набор пробелов одной строкой замены. Я вижу довольно много случаев, когда люди могут приходить на этот пост, чтобы заменить пробел чем-то, что не является пустой строкой, и это может быть полезно.

Просто используйте StringUtils из apache-commons. Это статический метод с именем StringUtils.deleteWhitespace.

@Gursel спасибо за ответ и сравнение производительности для двух регулярных выражений. Мне было интересно, почему есть разница в производительности между двумя? Есть ли что-то, чего мне не хватает, не могли бы вы указать мне какие-либо ссылки, которые больше говорят о разнице в производительности.

@GurselKoca уверен, что из-за моего любопытства вы использовали какой-либо инструмент или провели какое-то профилирование для сравнения производительности?

если вы хотите использовать этот метод в цикле, вы должны определить Pattern как конечную переменную Pattern.compile(«\\s») потому что replaceAll перекомпилирует шаблон при каждом вызове, return Pattern.compile(regex).matcher(this).replaceAll(replacement); ,

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

\w = Все, что не является символом слова (включая пунктуацию и т.д.)

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

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

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

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

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

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

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

Означает ли это, что мы можем перезаписать исходную строку, написав, например: S = S.replaceAll («\\ s», «»); тогда как сначала будет произведена замена, а затем S получит версию S с символьной надписью

Как насчет replaceAll(«\\s», «») . Обратитесь здесь.

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

String withoutWhitespace = StringUtils.deleteWhitespace(whitespaces); 

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

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

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

У вас уже есть правильный ответ от Gursel Koca, но я считаю, что есть хороший шанс, что это не то, что вы действительно хотите сделать. Как насчет разбора ключевых значений?

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] + " info"> 
Поделиться
17

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

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

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

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

В самом деле. Знак + может сделать его немного более дружественным к процессору, потому что последовательный пробел обрабатывается в одной операции замены, но это единственное отличие в этом случае. Это действительно All , а не + который заменяет непоследовательный пробел в строке.

Вы можете сделать это просто

String newMysz = mysz.replace(" ",""); 

Самый простой способ сделать это - использовать 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 ". Надеюсь, это поможет.

public static void main(String[] args) < String s = "name=john age=13 year=2001"; String t = s.replaceAll(" ", ""); System.out.println("s: " + s + ", t: " + t); >Output: s: name=john age=13 year=2001, t: name=johnage=13year=2001 
String a="string with multi spaces "; //or this String b= a.replaceAll("\\s+"," "); String c= a.replace(" "," ").replace(" "," ").replace(" "," ").replace(" "," ").replace(" "," "); 

//он отлично работает с любыми пробелами * не забывайте пробел в sting b

Использование Pattern And Matcher более динамично.

import java.util.regex.Matcher; import java.util.regex.Pattern; public class RemovingSpace < /** * @param args * Removing Space Using Matcher */ public static void main(String[] args) < String str= "jld fdkjg jfdg "; String pattern="[\\s]"; String replace=""; Pattern p= Pattern.compile(pattern); Matcher m=p.matcher(str); str=m.replaceAll(replace); System.out.println(str); >> 

В java мы можем выполнить следующую операцию:

String pattern="[\\s]"; String replace=""; part="name=john age=13 year=2001"; Pattern p=Pattern.compile(pattern); Matcher m=p.matcher(part); part=m.replaceAll(replace); System.out.println(part); 

для этого вам нужно импортировать следующие пакеты в свою программу:

import java.util.regex.Matcher; import java.util.regex.Pattern; 

\W означает "символ без слова". Шаблон для пробельных символов \s . Это хорошо описано в Pattern javadoc.

Использовать класс apache string util лучше избегать NullPointerException

org.apache.commons.lang3.StringUtils.replace("abc def ", " ", "") 
import java.util.*; public class RemoveSpace < public static void main(String[] args) < String mysz = "name=john age=13 year=2001"; Scanner scan = new Scanner(mysz); String result = ""; while(scan.hasNext()) < result += scan.next(); >System.out.println(result); > > 

Сначала пробел, второй без пробела.

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

Пример: НОРМАЛЬНОЕ ПРОСТРАНСТВО, ПРОСТРАНСТВО ТРЕХ-ЭФЕР, ПРОСТРАНСТВО

Поэтому нам нужно изменить

Чтобы удалить пробелы в вашем примере, это еще один способ сделать это:

String mysz = "name=john age=13 year=2001"; String[] test = mysz.split(" "); mysz = String.join("", mysz); 

Что это значит, он преобразует его в массив с пробелами, являющимися разделителями, а затем объединяет элементы в массиве без пробелов.

Это работает очень хорошо и легко понять.

Но очень неэффективное решение. И, как вы можете видеть из других решений - это работает только для "" пространства - а не для разных видов пробелов.

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

Белое пространство можно удалить с помощью функции isWhitespace из класса символов.

public static void main(String[] args) < String withSpace = "Remove white space from line"; StringBuilder removeSpace = new StringBuilder(); for (int i = 0; i> System.out.println(removeSpace); > 

Разделите каждую группу текста на свою собственную подстроку и затем соедините эти подстроки. ех.

public Address(String street, String city, String state, String zip ) < this.street = street; this.city = city; //Now checking to make sure that state has no spaces. int position = state.indexOf(" "); if(position >=0) < //now putting state back together if it has spaces. state = state.substring(0, position) + state.substring(position + 1); >
public static String removeWhiteSpaces(String str) < String s = ""; char[] arr = str.toCharArray(); for (int i = 0; i < arr.length; i++) < int temp = arr[i]; if(temp!=32 && temp!=9)< // 32 ASCII for space and 9 is for Tab s+=arr[i]; >> return s; > 

Вы можете достичь этого, не используя replaceAll() или любой предопределенный метод в Java. этот способ является предпочтительным: -

public class RemoveSpacesFromString < public static void main(String[] args) < // TODO Auto-generated method stub String newString; String str = "prashant is good" ; int i; char[] strArray = str.toCharArray(); StringBuffer sb = new StringBuffer(); for(i = 0; i> System.out.println(sb); /*newString = str.replaceAll(" " , ""); System.out.println(newString);*/ > > 
var str ="hello the dog is big" var expression = /\s+/g; var x =str.replace(expression, ""); return x; 

Это работает для меня и находит белые пробелы, а не просто пространства определенного размера.

Это приведет к удалению всех пробелов.

 String str="name=john age=13 year=2001"; String s[]=str.split(" "); StringBuilder v=new StringBuilder(); for (String string : s) < v.append(string); >str=v.toString(); 

Вы игнорируете такие вещи, как вкладки, а также все различные способы определения пробелов в Юникоде.

Ещё вопросы

  • 0 $ обновить метод PUT в Angular?
  • 1 Автоматизировать установку ucbrowser
  • 1 Virtuoso Jena Provider Construct Query Error
  • 0 MSQL: как получить 0 счетчиков вместо 1 и ноль с таблицами соединений или представлениями
  • 1 Protobuf-net тратит слишком много времени в RuntimeTypeModel.TakeLock
  • 0 Как отобразить ответ из базы данных на представление codeigniter в формате строки
  • 0 Почему Angular не может найти мой контроллер?
  • 0 Изменить аватар пользователя из аватар изображения доступны на моем сайте?
  • 1 python selenium firefox, специальный символ @ для всплывающей аутентификации
  • 0 Doctrine2 + Symfony2: приведение значений перед привязкой к DQL-запросу
  • 0 Выполнить функцию, если не удается выполнить другую функцию в течение периода времени
  • 0 Сохранить состояние Скрыть или Показать Div только для одного div, у которого было то же самое множественное div
  • 1 SVG `` Неточность
  • 0 JQuery триггер («клик») динамически загружаемого контента
  • 1 Как создать массив из разных элементов enum
  • 1 jar 2.2: есть ли замена класса GenericObjectPool.Config?
  • 1 Громкость голоса, полученного с микрофона, произвольно уменьшается (Android, OpenSLES)
  • 0 Функция заголовка php перенаправляет только на локальные страницы
  • 0 Первый параметр необязательный в UI Router
  • 1 Где разместить SwingUtilities.invokeLater в отдельном Java-приложении с поддержкой Spring?
  • 0 Размер сайта резко меняется в браузере
  • 0 CSS3 переходы вместо jQuery
  • 0 В AngularJS как вы загружаете страницу со скрытым элементом?
  • 1 отображение списка возможностей программы
  • 0 как сохранить промежуточный итог 2d массива
  • 0 Как провести модульное тестирование следующей функции в жасмине?
  • 1 Регистрация того же типа в коллекции с Castle.Windsor дает исключение
  • 1 Spring @Cacheable метод с нумерацией страниц
  • 0 rails: запрос has_many для получения списка объектов
  • 0 в чем разница между empty () и $ _POST [«name»] == «»; в php?
  • 0 Как получить значение и идентификатор из текстовой области, которая использует строку базы данных в качестве идентификатора
  • 1 Как передать несколько аргументов из фрейма данных pandas в функцию и вернуть результат в фрейм данных в определенных местах в фрейме данных
  • 0 JQuery автозаполнение: я не вижу предложения
  • 1 Использование HttpResponseMessage для просмотра ошибок
  • 1 Сбой сборки при включении привязки данных> Ошибка: у «другого» другой корень
  • 1 Tkinter: Можно ли встроить поля ввода в текстовый абзац, чтобы выполнить задачу закрытия?
  • 0 Странный эффект сравнения строк PHP, это может быть сделано лучше?
  • 0 Как реализовать скриптовые события для дизайна видеоигр?
  • 0 как предотвратить переход курсора на следующую строку в текстовой области с помощью jquery
  • 1 JSF Hibernate Критерии API
  • 0 MYSQL Сложный оператор выбора запроса
  • 0 о removeClass из родительского элемента
  • 0 Как установить несколько цветов разных параметров в письме, отправленном из проекта C #
  • 0 почему это JQuery не добавляет правильные значения в моей БД
  • 0 Как связать событие клика в угловых JS с помощью requirejs?
  • 1 Почему потоки не завершают выполнение в Python? Семафоры обеспечивают синхронизацию процессов, но выполнение не завершается
  • 0 Класс для подключения к БД, как использовать
  • 0 Выбрать количество из нескольких таблиц
  • 0 Dojo dijit TabContainer - встроенный выбор с вкладками

Источник

Читайте также:  Java interface with static class
Оцените статью