Как удалить повторяющиеся пробелы (включая вкладки, новые строки, пробелы и т.д.) в строке с использованием Java?
Как удалить повторяющиеся пробелы в строке с помощью Java?
Ответ 1
Вот так:
yourString = yourString.replaceAll("\\s+", " ");
Например
System.out.println("lorem ipsum dolor \n sit.".replaceAll("\\s+", " "));
выходы
lorem ipsum dolor sit.
Что означает этот \s+
?
\s+
является регулярным выражением. \s
соответствует пробелу, вкладке, новой строке, возврату каретки, фиду формы или вертикальной вкладке, а +
говорит "один или несколько из них". Таким образом, вышеуказанный код разрушит все "пробельные подстроки" длиной более одного символа с одним пробелом.
Ответ 2
Вы можете использовать регулярное выражение
(\s)\1
и
замените его на $1
.
Код Java:
str = str.replaceAll("(\\s)\\1","$1");
Если входной код "foo\t\tbar "
, вы получите "foo\tbar "
в качестве вывода. Но если вход "foo\t bar"
, он останется неизменным, поскольку он не имеет никаких последовательных символов пробела.
Если вы обрабатываете все пробельные символы (пробел, вертикальную вкладку, горизонтальную вкладку, возврат каретки, фид формы, новую строку) в качестве пробела, вы можете использовать следующее регулярное выражение, чтобы заменить любое количество последовательных пробелов одним пространством:
str = str.replaceAll("\\s+"," ");
Но если вы хотите заменить два последовательных пробела одним пространством, вы должны сделать:
str = str.replaceAll("\\s{2}"," ");
Ответ 3
Попробуйте это - вам нужно import java.util.regex.*;
Pattern pattern = Pattern.compile("\\s+");
Matcher matcher = pattern.matcher(string);
boolean check = matcher.find();
String str = matcher.replaceAll(" ");
Где string
- ваша строка, на которой вам нужно удалить повторяющиеся пробелы.
Ответ 4
hi самый быстрый (но не самый красивый способ), который я нашел,
while (cleantext.indexOf(" ") != -1)
cleantext = StringUtils.replace(cleantext, " ", " ");
это работает довольно быстро на android в противоположность регулярному выражению
Ответ 5
String str = " Text with multiple spaces ";
str = org.apache.commons.lang3.StringUtils.normalizeSpace(str);
// str = "Text with multiple spaces"
Ответ 6
Хотя уже слишком поздно, я нашел лучшее решение (которое работает для меня), которое заменит все последующие белые пробелы одного типа одним белым пространством своего типа. То есть:
Hello!\n\n\nMy World
будет
Hello!\nMy World
Обратите внимание, что все еще есть пробелы, ведущие и завершающие пробелы. Итак, мое полное решение:
str = str.trim().replaceAll("(\\s)+", "$1"));
Здесь trim()
заменяет все начальные и конечные строки пробела на "". (\\s)
предназначен для захвата \\s
(это белые пробелы, такие как '', '\n', '\ t') в группе # 1. Знак +
предназначен для сопоставления 1 или более предшествующих токенов. Таким образом, (\\s)+
может быть последовательными символами (1 или более) среди любых одиночных символов пробела ('', '\n' или '\ t'). $1
предназначен для замены строк соответствия строкой group # 1 (которая содержит только 1 символ пробела) соответствующего типа (то есть совпадающего символа одиночного пробела). Вышеупомянутое решение изменится следующим образом:
Hello!\n\n\nMy World
будет
Hello!\nMy World
Я не нашел мое решение выше, поэтому я разместил его.
Ответ 7
Если вы хотите избавиться от всех ведущих и конечных посторонних пробелов, вы хотите сделать что-то вроде этого:
// \\A = Start of input boundary
// \\z = End of input boundary
string = string.replaceAll("\\A\\s+(.*?)\\s+\\z", "$1");
Затем вы можете удалить дубликаты, используя другие стратегии, перечисленные здесь:
string = string.replaceAll("\\s+"," ");
Ответ 8
Вы также можете попробовать использовать String Tokeniser для любого пространства, вкладки, новой строки и т.д. Простым способом является
String s = "Your Text Here";
StringTokenizer st = new StringTokenizer( s, " " );
while(st.hasMoreTokens())
{
System.out.print(st.nextToken());
}
Ответ 9
Это можно сделать в три этапа:
- Преобразование строки в массив символов (ToCharArray)
- Применить для цикла в массиве charater
- Затем примените функцию замены строки (Replace ( "sting, которую вы хотите заменить", "оригинальная строка" ));