Форум программистов, компьютерный форум, киберфорум
Java SE (J2SE)
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
0 / 0 / 1
Регистрация: 27.04.2015
Сообщений: 7

Регулярные выражения Java

11.04.2016, 05:36. Показов 865. Ответов 2

Студворк — интернет-сервис помощи студентам
Здравствуйте. Изучаю Java, а конкретно регулярные выражения, решаю такую задачу:

"Необходимо реализовать консольную программу, которая бы фильтровала поток текстовой информации подаваемой на вход и на выходе показывала лишь те строчки, которые содержат слово передаваемое программе на вход в качестве аргумента.

Варианты усложнения:

Программа не должна учитывать регистр
В аргументах может быть передано не одно слово, а несколько
В качестве аргумента может быть задано не конкретное слово, а регулярное выражение "

Ввод-вывод организую из файла в файл.

Возникла сложность с последним пунктом - программа корректно работает с простыми регулярными выражениями, но напрочь отказывается работать с длинными. Т.е. если в инпуте - "^Hello World$", или же "^.*$", всё хорошо. Но при попытке засунуть выражение для проверки айпи - аутпут остается пустым. Само выражение проверял - при его вставке непосредственно в код всё работает, проблема только при чтении из файла.
Сам код:
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
38
39
40
41
42
43
44
package main;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Main {
 
    /**
     * @param args
     */
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        BufferedReader br = null;
        BufferedWriter bw = null;
        Pattern pattern;
        Matcher matcher;
        String currentLine, keyword;
        try {
                
            br = new BufferedReader(new FileReader("input"));
            bw = new BufferedWriter(new FileWriter("output"));
            keyword = br.readLine();
            System.out.println(keyword);
            pattern = Pattern.compile(keyword);
            while ((currentLine = br.readLine()) != null){
                System.out.println(currentLine);
                matcher = pattern.matcher(currentLine);
                if (matcher.matches()){ 
                    bw.write(currentLine+'\n');
                    System.out.println("Str founded: " + currentLine);
                }
            }
            bw.close();
        }
        catch (IOException e){
            System.out.println("File not found");
        }
        
    }
 
}
input:
^([01]?\\d\\d?|2[0-4]\\d|25[0-5])\\.([01]?\\d\\d?|2[0-4]\\d|25[0-5])\\.([01]?\\d\\d?|2[0-4]\\d|25[0-5])\\.([01]?\\d\\d?|2[0-4]\\d|25[0-5])$
177.242.241.123.241
127.0.0.9
382.21.23.43
255.255.255.255

output: пустой.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
11.04.2016, 05:36
Ответы с готовыми решениями:

Java и регулярные выражения
Всем привет, не получается исключить слово в регулярном выражении Надо найти слова заключенные между % (например %hello%), но при это...

Регулярные выражения [Java]
Как описать в регулярном выражении символ '+' как литерал, а не как специальный символ?

Java SE 8. Регулярные выражения
Здравствуйте. Я пишу прогамму на JAVA. Мне необходимо распознавать строку по шаблону. Шаблон следующего вида: . Ввел регулярое выражение,...

2
Эксперт Java
 Аватар для turbanoff
4094 / 3828 / 745
Регистрация: 18.05.2010
Сообщений: 9,331
Записей в блоге: 12
11.04.2016, 10:16
А зачем у вас по два слеша в файле написано? Слэш нунжно экранировать, только внутри строк в java программе - потому что java компилятор схлопнет их в один.
Если вы считываете регулярку извне, то нужно использовать обычный синтаксис регулярных выражений. То есть
Code
1
^([01]?\d\d?|2[0-4]\d|25[0-5])\.([01]?\d\d?|2[0-4]\d|25[0-5])\.([01]?\d\d?|2[0-4]\d|25[0-5])\.([01]?\d\d?|2[0-4]\d|25[0-5])$
1
0 / 0 / 1
Регистрация: 27.04.2015
Сообщений: 7
11.04.2016, 14:40  [ТС]
Спасибо, это помогло. Не догадался, что два слеша в коде нужны чтобы экранировать одиночный слеш.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
11.04.2016, 14:40
Помогаю со студенческими работами здесь

регулярные выражения Java
Добрый день. Пример из Thinking in java: Нужно найти выражение в предложении Подскажите, пожалуйста, почему оно находит слова...

Регулярные выражения Java
Есть строка. Я пытаюсь split'ом разделить ее на отдельные строки. String str =...

Регулярные выражения на Java
Добрый день. Программа должна выводить на екран отсортированые имена из текстового файла. В начале она записывает текст файла в отдельную...

Регулярные выражения [Java]
Здравствуйте. Столкнулся с такой проблемой. Не могу понять в чем ошибка в регулярном выражении. import java.util.*; import...

Валидация пароля в Java (регулярные выражения)
Здравствуйте, уважаемые форумчане. Несколько часов не могу разобраться с регулярками. Скурил всевозможные мануалы, но ничего не получается....


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Сборка примера Скачайте. . .
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net REST сервисы временно не работают, только через Web. Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
Модель сукцессии микоризы
anaschu 24.01.2026
Решили писать научную статью с неким РОманом
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru