Убрать двойной пробел java

Удалить лишний пробел между словами

Дан текстовый файл. Удалить из него все лишние пробелы, оставив между словами не бо-лее одного пробела. Результат поместить в новый файл. Имена входного и выходного файлов запрашиваются с клавиатуры.

Я думал, что с этой задачей мне поможет справиться метод split, но если после слова стоит несколько пробелов, он записывает их в отдельный элемент массива и потом снова их выводит. Не подскажите, как можно это исправить?

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
import java.io.*; import java.util.Scanner; public class Main { public static void main(String[] args) throws FileNotFoundException { File file = new File("C:/Users/User/Desktop/ПГУ/Программировние Интернет-приложений/Lb4/Text.txt"); Scanner scanner = new Scanner(file); while(scanner.hasNextLine()){ String word = scanner.nextLine(); String[] words = word.split(" "); for(int i = 0; i  words.length; i++){ if(words[i] != " ") { System.out.print(words[i] + " "); } } System.out.println(); } } }

Привет,[пробелы] как дела?
У меня все хорошо!

Привет, [пробелы] как дела?
У меня все хорошо!

Как мне удалить лишний пробел после удаления слова?
Здравствуйте! У меня задача на удаление из строки заданного слова. Мне нужно удалить лишний пробел.

Добавить пробел между словами
проблема, как добавить в конце проги чтобы было пробела между словами #include <stdafx.h>.

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

Азбука Морзе, добавить пробел между словами при декодировании
Написал "программу" для перевода кода Морзе на Английский и наоборот, но никак не могу понять как.

В строке между словами вставить вместо пробела запятую и пробел
скажите, в чем ошибка В строке между словами вставить вместо пробела запятую и пробел. #include.

Источник

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(» +», » «) (с одним пробелом). Я запускал временные тесты для строк, которые имели только один пробел и все двойные пробелы, и он выполнялся существенно быстрее для обеих операций при выполнении большого количества операций (миллионы или больше, в зависимости от среды).

    Источник

    Убрать лишние пробелы

    Никак не получается избавить от двойного пробела в строке » 7 8 5 6″. Мне нужно либо стразу один массив цифр оставить, либо избавиться от двойных пробелов, чтобы потом с помощью split(«[ ]») избавиться от обычных пробелов.

    Почитал похожие темы, и что там предлагают мне не помогло почему-то:

    ни line.replaceAll(«[\\s&&[^\r?\n]]+», » «).replaceAll(«(\r\n)+», «\r\n»).replaceAll(«\n+», «\n»)
    ни String[] str1 = line.split(«\\s+»)
    ни line.replaceAll(«[\\s]», » «)

    final String twoSpaces=" "; final String oneSpace=" "; String line; //наша строка while(line.indexOf(twoSpaces) >= 0) { myText.replace(twoSpaces, oneSpace); }

    Везде с удалением пробелов ничего не происходит(выдает ту же строку), а в случае с line.split(«\\s+») получается str1=»__7″, str1=»8__5″, str1=»6″

    line = in.readUTF(); System.out.println(line.replaceAll("[\\s&&[^\r?\n]]+", " ").replaceAll("(\r\n)+", "\r\n").replaceAll("\n+", "\n")); String[] str1 = line.split("\\s+"); System.out.println("Строка:" +line); for (int i = 0;i  str1.length; i++){ System.out.println("str1:" +str1[i]); } }

    Расставить знаки препинания и убрать лишние пробелы
    Убрать лишние пробелы, расставить знаки препинания. Пример: «First sentence Second sentence.».

    Удалить все однобуквенные слова и лишние пробелы
    Используйте класс Scanner для построчного чтения стандартного входного потока до конца файла.

    Создать новый файл и скопировать в него содержимое открытого изымая лишние пробелы
    Создать новый файл и скопировать в него содержимое открытого изымая лишние пробелы (не более одного.

    Убрать пробелы в int когда используется Sanner
    Есть: Scanner in = new Scanner(System.in); int b = in.nextInt(); Как сделать, чтобы когда.

    Хм, странно.
    Изначально я получал «__7 8__5 6» от сервера.
    line = in.readUTF();
    Я выводил ее на экран через System.out.println.
    Но я решил попробовать вручную задать переменную line = «__7 8__5 6». И так она работает, цифры отделяются от пробелов! Но почему она не работает в начальной версии?
    Я вывел в NetBeans мой файл text.txt и там в нем значатся нормальные цифры, какие мне и нужны. Передаю через writeUTF. Это же переменная типа String. Почему тогда не работает?
    P.S: открыл этот файл через Word и вот что в нем:

    line = in.readUTF(); line = line.trim(); String str1[] = {line.substring(0, 2), line.substring(2, 4), line.substring(5, 7), line.substring(7)};

    Эксперт PythonЭксперт JavaЭксперт CЭксперт С++

    public class SplitBySpaces { public static void main(String[] args) { String s = "1 2 3 4 5 6 7"; String[] a = s.split("[\\s]+"); for ( String n : a ) System.out.println("\"" + n + "\""); } }

    Строки. Убрать пробелы, если их более одного подряд
    Добрый день, дорогие друзья. Хочу попросить у вас помощи. Нужно написать программу на языке Java.

    Удалить лишние пробелы
    Дана строка, Вам требуется преобразовать все идущие подряд пробелы в один. Входные данные Длина.

    Убрать пробелы в начале и конце строки через метод trim()
    Добрый день. Нужно заменить пробелы в середине строки на символ "*", а пробелы в начале и конце -.

    Убрать лишние пробелы
    Введите массив символов из n элементов. Убрать лишние пробелы (более одного подряд).

    Убрать лишние пробелы
    Дана строка в которой слова отделены пробелами. убрать лишние пробелы. Пробел считается лишним.

    Источник

    Удалить из строки лишние пробелы

    Добрый день. Задача: необходимо вырезать из строки все лишние пробелы два и более подряд. Также удалить лишние пробелы в начале и конце строки. Стянул самый понятный вариант со SO. Дальше начал проходиться деббагером, чтобы понять алгоритм. В принципе всё понятно, кроме присвоений chatAt (прочитал уже про charAt). Вопрос (см. скриншоты): что за присвоения метода charAt — это цифра с юникода? Гуглил и вроде бы нет. Прошу пояснить за цифру 32 и 100.. Я понял, что цифра 32 соответствует пробелу, цифра 72 соответствует большой I, 100 соответствует d. Но что это за цифра? Цифра юникода?

    1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
    import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; public class Solution { public static void main(String[] args) throws IOException { // BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in)); String s = " I don't know."; // String s = bufferedReader.readLine(); int timesSpace = 0; String res = ""; for (int i = 0; i  s.length(); i++) { char c = s.charAt(i); if(c == ' '){ timesSpace++; if(timesSpace  2) res += c; }else{ res += c; timesSpace = 0; } } System.out.println(res.trim()); } }

    Источник

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

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

    9 ответы

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

    Что это \s+ значит? \s+ является регулярным выражением. \s соответствует пробелу, табуляции, новой строке, возврату каретки, переводу страницы или вертикальной табуляции и + говорит «один или несколько из них». Таким образом, приведенный выше код свернет все «подстроки пробелов» длиннее одного символа с помощью одного символа пробела. источник: Java: удаление повторяющихся пробелов в строках

    @SuhrobSamiev — String.replaceAll() используется в Java начиная с JDK 1.4. docs.oracle.com/javase/1.4.2/docs/api/java/lang/…, java.lang.String) — Дэвид Моулз

    Строковый литерал «\\» представляет собой строку, состоящую из одной обратной косой черты. Итак, чтобы представить \s+ ты пишешь «\\s+» . — айообе

    Если вход «foo\t\tbar » ты получишь «foo\tbar » как выход
    Но если ввод «foo\t bar» он останется неизменным, потому что в нем нет последовательных пробельных символов. Если вы рассматриваете все пробельные символы (пробел, вертикальная вкладка, горизонтальная вкладка, возврат каретки, перевод формы, новая строка) как пробел, вы можете использовать следующее регулярное выражение для замены любой количество последовательных пробелов с одним пробелом:

    String str = " Text with multiple spaces "; str = org.apache.commons.lang3.StringUtils.normalizeSpace(str); // str = "Text with multiple spaces" 
     Pattern pattern = Pattern.compile("\\s+"); Matcher matcher = pattern.matcher(string); boolean check = matcher.find(); String str = matcher.replaceAll(" "); 
    while (cleantext.indexOf(" ") != -1) cleantext = StringUtils.replace(cleantext, " ", " "); 

    Работает только для пробелов, но не для других пробелов, таких как табуляция и новая строка. — острая боль

    я знаю, вам нужно добавить больше этих циклов для других объектов. Но этот код работает намного быстрее на Android, поскольку эти регулярные выражения мне приходилось обрабатывать полные электронные книги. — Wutzebaer

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

    Хотя уже слишком поздно, я нашел лучшее решение (которое работает для меня), которое заменит все последовательные пробелы одного типа одним пробелом того же типа. То есть:

    str = str.trim().replaceAll("(\\s)+", "$1")); 

    Здесь, trim() заменяет все начальные и конечные строки пробелов на «». (\\s) для захвата \\s (то есть пробелы, такие как ‘ ‘, ‘\n’, ‘\t’) в группа # 1. + знак предназначен для сопоставления 1 или более предшествующих токенов. Так (\\s)+ могут быть последовательными символами (1 или более) среди любых одиночных пробельных символов (‘ ‘, ‘\n’ или ‘\t’). $1 предназначен для замены совпадающих строк на группа # 1 строка (которая содержит только 1 символ пробела) соответствующего типа (то есть единственный совпавший символ пробела). Приведенное выше решение изменится следующим образом:

    Если вы хотите избавиться от всех начальных и конечных посторонних пробелов, вам нужно сделать что-то вроде этого:

    // \\A = Start of input boundary // \\z = End of input boundary string = string.replaceAll("\\A\\s+(.*?)\\s+\\z", "$1"); 
    string = string.replaceAll("\\s+"," "); 

    Вы также можете попробовать использовать String Tokeniser для любого пробела, табуляции, новой строки и всего остального. Простой способ,

    String s = "Your Text Here"; StringTokenizer st = new StringTokenizer( s, " " ); while(st.hasMoreTokens())
    1. Преобразование строки в массив символов (ToCharArray)
    2. Применить цикл к массиву символов
    3. Затем применить функцию замены строки (Replace («заменяемая строка», «исходная строка»));

    Это не очень хорошее решение, переход к массиву символов ничего не решает. На самом деле вы не объясняете, как выполнить замену, которая является сутью проблемы. Также, пожалуйста не размещать совершенно не относящиеся к делу ссылки. Если вы это сделаете, вас пометят как спамера. — Мат

    Не тот ответ, который вы ищете? Просмотрите другие вопросы с метками java string whitespace or задайте свой вопрос.

    Источник

    Читайте также:  Java create array with string
Оцените статью