Как удалить повторяющиеся пробелы в строке с помощью Java?

Как удалить повторяющиеся пробелы (включая вкладки, новые строки, пробелы и т.д.) в строке с использованием Java?

Ответ 1

Вот так:

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

Например

System.out.println("lorem  ipsum   dolor \n sit.".replaceAll("\\s+", " "));

выходы

lorem ipsum dolor sit.

Что означает этот \s+?

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


Источник: Java: удаление повторяющихся пробелов в строках

Ответ 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, которую вы хотите заменить", "оригинальная строка" ));