Форум программистов, компьютерный форум, киберфорум
Java SE (J2SE)
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.66/76: Рейтинг темы: голосов - 76, средняя оценка - 4.66
5 / 5 / 2
Регистрация: 09.03.2011
Сообщений: 52

Удаление лишних пробелов в файле

03.01.2012, 22:14. Показов 14852. Ответов 16
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Помогите реализовать программу, которая загружает файл, и удаляет в нем все лишние пропуски, нужно, чтобы между словами было не больше одного пробела (т.е. например было 3, стал 1)
и чтобы все пустые строки удалялись.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
03.01.2012, 22:14
Ответы с готовыми решениями:

Удаление лишних пробелов в файле
Помогите плиз решить лабы по паскалю) 2. Дан текстовый файл f. Переписать его содержимое в файл g таким образом, чтобы в нем были удалены...

Задача на удаление лишних пробелов в текстовом файле
Вот тут такая задачка кто нибудь помогите мне:help: Организовать текстовый файл состоящий из N строк. Преобразовать файл, удалив в...

Удаление лишних переводов на новую строку с удалением лишних пробелов
Добрый вечер, форумчане! Прошу помочь. Из текста необходимо удалить лишние знаки пробелов и переводов на новую строку. Когда использую...

16
 Аватар для exiqa
487 / 333 / 71
Регистрация: 24.12.2011
Сообщений: 591
03.01.2012, 22:39
что значит пустая строка?
0
5 / 5 / 2
Регистрация: 09.03.2011
Сообщений: 52
04.01.2012, 07:42  [ТС]
Цитата Сообщение от exiqa Посмотреть сообщение
что значит пустая строка?
Например файл:
Текст

Текст2

Между текстами пустая строка, нужно чтобы получилось:
Текст
Текст2
0
142 / 105 / 16
Регистрация: 21.04.2011
Сообщений: 402
04.01.2012, 13:33
Поможем. Пиши свой код - найдем как дописать
0
 Аватар для mutagen
2587 / 2260 / 257
Регистрация: 14.09.2011
Сообщений: 5,185
Записей в блоге: 18
04.01.2012, 20:09
Java
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
29
30
31
32
33
34
35
36
37
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.io.LineNumberReader;
import java.util.ArrayList;
 
public class SkipSpacer {
 
    public static void main(String[] args) throws IOException {
        LineNumberReader lnr = new LineNumberReader(new FileReader(new File("in.txt")));
        String s = lnr.readLine();
        String tmp;
        ArrayList<String> out = new ArrayList<String>();
        do {
            String[] arr = s.split(" ");
            for (int i = 0; i < arr.length; i++) {
                arr[i] = arr[i].trim();
            }
            tmp = join(arr);
            if (!tmp.equals(""))
                out.add(tmp);
            s = lnr.readLine();
        } while (s != null);
        for (String string : out) {
            System.out.println(string);
        }
    }
 
    public static String join(String[] arr) {
        StringBuilder sb = new StringBuilder();
        for (String string : arr) {
            if (!string.equals(""))
                sb.append(string).append(" ");
        }
        return sb.toString().trim();
    }
}
1
 Аватар для exiqa
487 / 333 / 71
Регистрация: 24.12.2011
Сообщений: 591
05.01.2012, 18:23
немножко оптимизации
вот это
Java
1
2
3
4
String[] arr = s.split(" ");
        for (int i = 0; i < arr.length; i++) {
        arr[i] = arr[i].trim();
        }
можно просто заменить на

Java
1
String[] arr = s.split("\\s+");
1
Эксперт JavaЭксперт С++
 Аватар для M128K145
8384 / 3617 / 419
Регистрация: 03.07.2009
Сообщений: 10,709
06.01.2012, 03:04
мои пять копеек
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
import java.io.FileInputStream;
import java.io.IOException;
 
public class Main {
 
   public static void main(String[] args) throws IOException {
      FileInputStream inFile = new FileInputStream("testFile");
      byte[] str = new byte[inFile.available()];
      inFile.read(str);
      String text = new String(str);
      System.out.println(text.replaceAll("[\\s&&[^\r?\n]]+", " ").replaceAll("(\r\n)+", "\r\n")
            .replaceAll("\n+", "\n"));
   }
}
Вот эту часть
Java
1
.replaceAll("(\r\n)+", "\r\n")
можно опустить, но не хочется включать виндовую машину для проверки
2
5 / 5 / 2
Регистрация: 09.03.2011
Сообщений: 52
06.01.2012, 19:30  [ТС]
Цитата Сообщение от M128K145 Посмотреть сообщение
мои пять копеек
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
import java.io.FileInputStream;
import java.io.IOException;
 
public class Main {
 
   public static void main(String[] args) throws IOException {
      FileInputStream inFile = new FileInputStream("testFile");
      byte[] str = new byte[inFile.available()];
      inFile.read(str);
      String text = new String(str);
      System.out.println(text.replaceAll("[\\s&&[^\r?\n]]+", " ").replaceAll("(\r\n)+", "\r\n")
            .replaceAll("\n+", "\n"));
   }
}
Вот эту часть
Java
1
.replaceAll("(\r\n)+", "\r\n")
можно опустить, но не хочется включать виндовую машину для проверки
Всё работает, спасибо
Можете полностью растолковать свой код и помочь еще удалить пробелы в начале строк и в конце строк?
0
Эксперт JavaЭксперт С++
 Аватар для M128K145
8384 / 3617 / 419
Регистрация: 03.07.2009
Сообщений: 10,709
07.01.2012, 02:14
Цитата Сообщение от RampKiller Посмотреть сообщение
удалить пробелы в начале строк и в конце строк?
Тогда так
Java
1
2
System.out.println(text.replaceAll("[\\s&&[^\r?\n]]+", " ").replaceAll(" ?(\r\n)+", "\r\n")
      .replaceAll(" ?\n+", "\n").replaceAll("^ ", ""));
а еще лучше так
Java
1
2
3
System.out.println(text.replaceAll("[\\s&&[^\r?\n]]{2,}", " ")
      .replaceAll("( ?(\r\n)){2,}", "\r\n").replaceAll("( ?\n){2,}", "\n")
      .replaceAll("^ ", ""));
- так замен меньше.

Здесь происходит всего-лишь замена частей текста, описанных регулярными выражениями, на значения, переданные вторым параметром

"[\\s&&[^\r?\n]]{2,}" - все пробелы, кроме возврата каретки и переноса строки, при повторении два и более раз, заменяются на строку, переданную вторым параметром
"( ?(\r\n)){2,}" - пробел(может быть, а может не быть) и возврат каретки с переводом на новую строку(\r\n - перевод на новую строку в Windows). При повторении 2 и более раза - заменяется на второй параметр
"( ?\n){2,}" - то же самое, но для *nix (перевод строки - обычный \n)
"^ " - пробел в начале строки заменяется на пустую строку
1
 Аватар для mutagen
2587 / 2260 / 257
Регистрация: 14.09.2011
Сообщений: 5,185
Записей в блоге: 18
07.01.2012, 03:03
M128K145 - а разве такие мегарекспы это не оверпрограмминг ))) да ещё и негибкое решение ))) платформозависимое )))
0
5 / 5 / 2
Регистрация: 09.03.2011
Сообщений: 52
07.01.2012, 14:07  [ТС]
replaceAll("^ ", "") - не работает.

Попробовал replaceAll("\n ", "\n"), работает на все строки, кроме 1-ой, оно и понятно.
Вопрос актуален
0
Эксперт JavaЭксперт С++
 Аватар для M128K145
8384 / 3617 / 419
Регистрация: 03.07.2009
Сообщений: 10,709
07.01.2012, 14:47
Цитата Сообщение от mutagen Посмотреть сообщение
платформозависимое
Ну почему же платформозависимое? Вполне себе независимое, т.к. файл может быть создан как в винде и открыт в лине, так и создан в лине, но открыт в винде. Более того, каким образом вы будете записывать свои строки обратно в файл, если появится такая необходимость? Я имею в виду, что вы будете использовать как перевод строки - \r\n или \n? В моем варианте такой вопрос не возникает, т.к. я обрабатываю такие переводы строк по отдельности(хоть немного и дольше)

Цитата Сообщение от mutagen Посмотреть сообщение
такие мегарекспы это не оверпрограмминг
не знаю значения слова оверпрограмминг

Цитата Сообщение от RampKiller Посмотреть сообщение
replaceAll("^ ", "") - не работает.
Да, немного ошибся, вот исправленное
Java
1
2
3
System.out.println(text.replaceAll("[\\s&&[^\r?\n]]{2,}", " ")
      .replaceAll("( ?(\r\n)){2,}", "\r\n").replaceAll("( ?\n){2,}", "\n")
      .replaceAll("\n ", "\n").trim());
1
 Аватар для mutagen
2587 / 2260 / 257
Регистрация: 14.09.2011
Сообщений: 5,185
Записей в блоге: 18
07.01.2012, 15:08
Цитата Сообщение от M128K145 Посмотреть сообщение
не знаю значения слова оверпрограмминг
Это когда труды по созданию кода превышают по цене его оплату )))
Ну и ещё всякие там апологеты утверждают, что код больший по сайзу но читаемый - предпочтительнее в команде, чем круто навёрнутый и короткий.
1
Эксперт JavaЭксперт С++
 Аватар для M128K145
8384 / 3617 / 419
Регистрация: 03.07.2009
Сообщений: 10,709
07.01.2012, 15:17
Ну так тут же его нету Это обычные регулярки с одним множеством или просто последовательностью символов

Не по теме:

я прост потихоньку разбираюсь в регулярках и тренируюсь на маленьких примерах, т.к. очень полезная вещь :)

0
 Аватар для mutagen
2587 / 2260 / 257
Регистрация: 14.09.2011
Сообщений: 5,185
Записей в блоге: 18
07.01.2012, 15:44
Цитата Сообщение от M128K145 Посмотреть сообщение
я прост потихоньку разбираюсь в регулярках и тренируюсь на маленьких примерах, т.к. очень полезная вещь
С этим очень согласен, жутко удобная вещь. Правда иногда регулярки ставят хорошие плохообнаружимые подножки ))) Но зато при помощи регулярок можно наворачивать офигенную логику(аналогом которой будет 10 страниц ифов) и всё в одной строке.
ЗЫЖ У регулярок огромный минус плохая адаптируемость при инкрементальных изменениях, через какое-то время итераций по изменению - они становятся просто монстроидальными )))
0
4 / 4 / 1
Регистрация: 15.05.2012
Сообщений: 63
23.02.2013, 11:56
Java
1
2
3
4
5
6
FileInputStream inFile = new FileInputStream("data.html");
    byte[] str = new byte[inFile.available()];
    inFile.read(str);
    String text = new String(str);
    
    System.out.print(text);
использую этот код для вывода кода страницы html.
но почему-то обрезает 1/3 страницы.
т.е начинает выводить не с начала.
почему такое происходит?
в html странице 2000 строк.
0
 Аватар для Skipy
2000 / 1427 / 92
Регистрация: 25.11.2010
Сообщений: 3,611
25.02.2013, 13:00
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
25.02.2013, 13:00
Помогаю со студенческими работами здесь

Создание программы со своей библиотекой ( удаление элементов с N по M в строке и удаление лишних пробелов(если 2 и более оставить один))
добрый день. помогите, пожалуйста понять мои ошибки в работе. Мне нужно написать программу со своей библиотекой, которая включает в себя...

Удаление лишних пробелов
дана строка, состоящая из слов, разделенных пробелами. напишите программу, удаляющую лишние пробелы. пробел считается лишним, если он :...

Удаление лишних пробелов
Помогите пожалуйста. Есть word документ. В нем есть как текст так и таблицы. В ячейках таблиц тоже текст. Как удалить лишние пробелы...

Удаление лишних пробелов
Задачи 1)Определите, является ли заданная строка правильной записью идентификатора по правилам Паскаля. 2)Написать программу...

Удаление лишних пробелов
Товарищи! Возникла сложность с удалением лишних пробелов из предложения из 2х слов &quot;новый год&quot; в котором 3 пробела. Примеры...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
17
Ответ Создать тему
Новые блоги и статьи
Символьное дифференцирование
igorrr37 13.02.2026
/ * Логарифм записывается как: (x-2)log(x^2+2) - означает логарифм (x^2+2) по основанию (x-2). Унарный минус обозначается как ! */ #include <iostream> #include <stack> #include <cctype>. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru