- Удаление пробелов из строк в Java
- ОТВЕТЫ
- Ответ 1
- Ответ 2
- Ответ 3
- Ответ 4
- Ответ 5
- Ответ 6
- Ответ 7
- Ответ 8
- Ответ 10
- Ответ 11
- Ответ 12
- Ответ 13
- Ответ 14
- Ответ 15
- Ответ 16
- Ответ 17
- Ответ 18
- Ответ 19
- Ответ 20
- Ответ 21
- Ответ 22
- Ответ 23
- Ответ 24
- Ответ 25
- Ответ 26
- Ответ 27
- Ответ 28
- Ответ 29
- Ответ 30
- Как заменить пробелы между словами в строке
- Замена всех пробелов
- Замена пробелов между словами
- Исходный код
- Заключение
- Удаление пробелов из строк в Java
- 30 ответов
- Java, как заменить 2 или более пробелов одним пробелом в строке и удалить начальные и конечные пробелы
- 20 ответов
- См. также
- Нет trim() regex
- См. также
Удаление пробелов из строк в Java
Я хочу удалить пробелы в строке. Я попробовал trim() , но это удаляет только пробелы до и после всей строки. Я также пробовал replaceAll(«\\W», «») , но затем удаляется = .
Как я могу получить строку с помощью:
mysz2 = "name=johnage=13year=2001"
ОТВЕТЫ
Ответ 1
st.replaceAll(«\\s+»,»») удаляет все пробелы и невидимые символы (например, tab, \n ).
st.replaceAll(«\\s+»,»») и st.replaceAll(«\\s»,»») дают тот же результат.
Второе регулярное выражение на 20% быстрее, чем первое, но по мере увеличения числа последовательных пробелов первое работает лучше второго.
Назначьте значение переменной, если она не используется напрямую:
Ответ 2
\w = Все, что является символом слова
\w = Все, что не является символом слова (включая пунктуацию и т.д.)
\s = Все, что является символом пробела (включая пробел, символы табуляции и т.д.)
\s = Все, что не является символом пробела (включая буквы и цифры, а также пунктуацию и т.д.)
(Edit: Как указано, вам нужно избежать обратного слэша, если вы хотите, чтобы \s достигли механизма регулярных выражений, в результате получилось \\s .)
Ответ 3
Самый правильный ответ на вопрос:
String mysz2 = mysz.replaceAll("\\s","");
Я просто адаптировал этот код из других ответов. Я отправляю его, потому что, помимо того, что именно этот запрос запрошен, он также демонстрирует, что результат возвращается как новая строка, исходная строка не изменяется, как это видно из некоторых ответов.
(Опытные разработчики Java могут сказать: «Конечно, вы не можете на самом деле модифицировать строку», но целевая аудитория для этого вопроса может не знать этого.)
Ответ 4
Как насчет replaceAll(«\\s», «») . Обратитесь здесь.
Ответ 5
Один из способов обработки строковых манипуляций — это StringUtils из общедоступных Apache.
String withoutWhitespace = StringUtils.deleteWhitespace(whitespaces);
Здесь вы можете найти . commons-lang включает в себя много больше и хорошо поддерживается.
Ответ 6
Если вам нужно также удалить нерушимые пространства, вы можете обновить свой код следующим образом:
Ответ 7
Если вы предпочитаете классы утилиты для регулярных выражений, существует метод trimAllWhitespace (String) в StringUtils в Spring Framework.
Ответ 8
У вас уже есть правильный ответ от 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] + " post-104 post type-post status-publish format-standard has-post-thumbnail hentry category-uncategorized">Ответ 9
Вы должны использовать
s.replaceAll("\\s+", "");
Таким образом, он будет работать с несколькими пространствами между каждой строкой. Знак + в указанном выше выражении означает "один или несколько \s"
Ответ 10
Самый простой способ сделать это - использовать 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 ". Надеюсь, это поможет.
Ответ 11
Вы можете сделать это просто
String newMysz = mysz.replace(" ","");
Ответ 12
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
Ответ 13
String a="string with multi spaces "; //or this String b= a.replaceAll("\\s+"," "); String c= a.replace(" "," ").replace(" "," ").replace(" "," ").replace(" "," ").replace(" "," ");
//он отлично работает с любыми пробелами * не забывайте пробел в sting b
Ответ 14
\W означает "символ без слова". Шаблон для пробельных символов \s . Это хорошо описано в Pattern javadoc.
Ответ 15
В 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;
Ответ 16
Использование 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); >>
Ответ 17
Ответ 18
Сначала пробел, второй без пробела.
Ответ 19
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); > >
Ответ 20
Использовать класс apache string util лучше избегать NullPointerException
org.apache.commons.lang3.StringUtils.replace("abc def ", " ", "")
Ответ 21
есть много способов решить эту проблему. вы можете использовать функцию разделения или заменить функцию строк.
Ответ 22
Чтобы удалить пробелы в вашем примере, это еще один способ сделать это:
String mysz = "name=john age=13 year=2001"; String[] test = mysz.split(" "); mysz = String.join("", mysz);
Что это значит, он преобразует его в массив с пробелами, являющимися разделителями, а затем объединяет элементы в массиве без пробелов.
Это работает очень хорошо и легко понять.
Ответ 23
Есть еще пробел, который тоже существует в строках. Так что пробел, который нам может понадобиться заменить из строк.
Пример: НОРМАЛЬНОЕ ПРОСТРАНСТВО, ПРОСТРАНСТВО ТРЕХ-ЭФЕР, ПРОСТРАНСТВО
Поэтому нам нужно изменить
Ответ 24
При использовании st.replaceAll("\\s+","") в Kotlin убедитесь, что вы "\\s+" с помощью Regex:
Ответ 25
var str ="hello the dog is big" var expression = /\s+/g; var x =str.replace(expression, ""); return x;
Это работает для меня и находит белые пробелы, а не просто пространства определенного размера.
Ответ 26
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; >
Ответ 27
Разделите каждую группу текста на собственную подстроку и затем объедините эти подстроки:
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); >>
Ответ 28
Белое пространство можно удалить с помощью функции 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); >
Ответ 29
Вы также можете взглянуть на приведенный ниже код Java. В следующих кодах не используются "встроенные" методы.
/** * Remove all characters from an alphanumeric string. */ public class RemoveCharFromAlphanumerics < public static void main(String[] args) < String inp = "01239Debashish123Pattn456aik"; char[] out = inp.toCharArray(); int totint=0; for (int i = 0; i < out.length; i++) < System.out.println(out[i] + " : " + (int) out[i]); if ((int) out[i] >= 65 && (int) out[i] else < totint+=1; >> System.out.println(String.valueOf(out)); System.out.println(String.valueOf("Length: "+ out.length)); for (int c=0; c > System.out.println(String.valueOf(out)); System.out.println("**********"); System.out.println("**********"); char[] whitespace = new char[totint]; int t=0; for (int d=0; d< out.length; d++) < int fst =32; if ((int) out[d] >= 48 && (int) out[d] > System.out.println("**********"); System.out.println("**********"); System.out.println("The String is: " + String.valueOf(whitespace)); > >
String inp = "01239Debashish123Pattn456aik";
The String is: 01239123456
Ответ 30
private String generateAttachName(String fileName, String searchOn, String char1) < return fileName.replaceAll(searchOn, char1); >String fileName= generateAttachName("Hello My Mom","\\s","");
Как заменить пробелы между словами в строке
Допустим, у вас есть строка, состоящая из нескольких слов:
String s = "Hello Amazing World";
Причём эти слова разделены несколькими пробелами.
Если вам нужно заменить пробелы между этими словами, вы можете воспользоваться двумя способами.
Замена всех пробелов
Первый способ – это замена всех пробелов с помощью метода методом String.replaceAll. Этот метод заменит буквально каждый пробел в строке на нужный символ:
System.out.println("Hello Amazing World".replaceAll(" ", "_"));
Замена пробелов между словами
Если же вам нужно заменить несколько пробелов между словами на определённый символ, вы можете воспользоваться regex «\\s+»:
System.out.println("Hello Amazing World".replaceAll("\\s+", "_"));
В этом случае вся цельная последовательность пробелов будет заменена на нужный символ.
Исходный код
package ru.javalessons.strings; public class ReplaceWhitespacesBetweenWords < public static void main(String[] args) < System.out.println("Hello Amazing World".replaceAll(" ", "_")); System.out.println("Hello Amazing World".replaceAll("\\s+", "_")); System.out.println(replaceWhitespacesBetweenWords("Hello Amazing World", "_")); >public static String replaceWhitespacesBetweenWords(String s, String replace) < if (s == null || s.length() < 2) return ""; return s.replaceAll("\\s+", replace); >>
Заключение
Вы узнали, как с помощью метода String.replaceAll заменить все вхождения в строке на нужный символ (или строку).
Удаление пробелов из строк в 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); ,
Java, как заменить 2 или более пробелов одним пробелом в строке и удалить начальные и конечные пробелы
Вы должны рассмотреть вопрос о принятии ответа. Людям, попадающим на страницу позже, гораздо проще выбрать окончательное решение.
20 ответов
String after = before.trim().replaceAll(" +", " ");
См. также
Нет trim() regex
Это также можно сделать только с одним replaceAll , но это гораздо менее читаемо, чем решение trim() . Тем не менее, он предоставил здесь только для того, чтобы показать, что может делать регулярное выражение:
String[] tests = < " x ", // [x] " 1 2 3 ", // [1 2 3] "", // [] " ", // [] >; for (String test : tests)
- ^_+ : любая последовательность пробелов в начале строки
- Сопоставьте и замените на $1 , который фиксирует пустую строку
- Сопоставьте и замените на $1 , который фиксирует пустую строку
- Сопоставьте и замените на $1 , который фиксирует одно пробел
См. также
+1, тем более, что стоит отметить, что выполнение trim() а затем replaceAll() использует меньше памяти, чем наоборот. Не очень, но если это вызывается много-много раз, это может сложиться, особенно если есть много «обрезаемых пробелов». ( Trim() самом деле не избавляется от лишнего пространства - он просто скрывает его, перемещая начальное и конечное значения. Базовый char[] остается неизменным.)
Я не эксперт, но, используя ваше описание trim (), если исходная строка будет удалена, она также не удалит обрезанную строку, которая является ее частью?
Хорошее регулярное выражение Примечание: замена пробела `` на \\s заменит любую группу пробелов желаемым символом.
Обратите внимание, что часть () + будет соответствовать одному пробелу и заменить его одним пробелом. Возможно, ( <пробел> <пробел>+) было бы лучше, поэтому он совпадает только в том случае, если имеется несколько пробелов и замена приведет к чистому изменению строки.пробел>
Как отметил Ли .trim().replaceAll(" +", " ") , .trim().replaceAll(" +", " ") (с двумя пробелами) быстрее, чем .trim().replaceAll(" +", " ") (с одним пробелом). Я запускал временные тесты для строк, которые имели только один пробел и все двойные пробелы, и он выполнялся существенно быстрее для обеих операций при выполнении большого количества операций (миллионы или больше, в зависимости от среды).