5 / 5 / 2
Регистрация: 09.03.2011
Сообщений: 52

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

03.01.2012, 22:14. Показов 14909. Ответов 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
Ответ Создать тему
Опции темы

Новые блоги и статьи
Валидация и контроль данных табличной части документа перед записью
Maks 22.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в КА2. Задача: контроль и валидация данных табличной части документа перед записью с учетом регламента компании. . .
Отчёт о затраченных материалах за определенный период с макетом печатной формы
Maks 21.04.2026
Отчёт из решения ниже размещён в конфигурации КА2. Задача: разработка отчёта по затраченным материалам за определённый период, с возможностью вывода печатной формы отчёта с шапкой и подвалом. В. . .
Отчёт о спецтехнике находящейся в ремонте
Maks 20.04.2026
Отчёт из решения ниже размещен в конфигурации КА2. Задача: отобразить спецтехнику, которая на данный момент находится в ремонте. Есть нетиповой документ "Заявка на ремонт спецтехники" который. . .
Памятка для бота и "визитка" для читателей "Semantic Universe Layer (Слой семантической вселенной)"
Hrethgir 19.04.2026
Сгенерировано для краткого описания по случаю сборки и компиляции скелета серверного приложения. И пусть после этого скажут, что статьи сгенерированные AI - туфта и не интересно. И это не реклама -. . .
Запрет удаления строк ТЧ документа при определённом условии
Maks 19.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "Аккумуляторы", разработанного в конфигурации КА2. У данного документа есть ТЧ, в которой в зависимости от прав доступа. . .
Модель заражения группы наркоманов
alhaos 17.04.2026
Условия задачи сформулированы тут Суть: - Группа наркоманов из 10 человек. - Только один инфицирован ВИЧ. - Колются одной иглой. - Колются раз в день. - Колются последовательно через. . .
Мысли в слух. Про "навсегда".
kumehtar 16.04.2026
Подумалось тут, что наверное очень глупо использовать во всяких своих установках понятие "навсегда". Это очень сильное понятие, и я только начинаю понимать край его смысла, не смотря на то что давно. . .
My Business CRM
MaGz GoLd 16.04.2026
Всем привет, недавно возникла потребность создать CRM, для личных нужд. Собственно программа предоставляет из себя базу данных клиентов, в которой можно фиксировать звонки, стадии сделки, а также. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru