Форум программистов, компьютерный форум, киберфорум
Java SE (J2SE)
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.77/13: Рейтинг темы: голосов - 13, средняя оценка - 4.77
0 / 0 / 3
Регистрация: 22.06.2014
Сообщений: 54
1

Аналог grep

12.09.2016, 23:26. Показов 2376. Ответов 1
Метки нет (Все метки)

Всем привет. Есть задача: Необходимо реализовать консольную программу, которая бы фильтровала поток текстовой информации подаваемой на вход и на выходе показывала лишь те строчки, которые содержат слово передаваемое программе на вход в качестве аргумента. Я ступил и ключевое слово задаю не в качестве аргумента, а через стандартный ввод. Вот текст программы:
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
import java.util.Scanner;
public class grep {
    public static void main (String args[])
    {
        System.out.print("Введите текст:");
        Scanner in = new Scanner(System.in);
        String text =in.nextLine();
 
        char[] Atext = new char[text.length()];
        Atext = text.toCharArray();
 
        System.out.print("Введите фразу:");
        String phrase =in.nextLine();
        char[] Aphrase = new char[phrase.length()];
        Aphrase = phrase.toCharArray();
 
        int k = 0; // счетчик предложения с заданным словом
 
        for(int i =0; i<Atext.length; i++) {
            if (Atext[i] == ' ')
                continue;
            if (Atext[i] == '.')
                k = i + 2;
            for (int j = 0; j < Aphrase.length; j++) {
                if (Aphrase[j] == Atext[i + j] && j == Aphrase.length - 1) {
                    while (Atext[k] != '.') {
                        System.out.print(Atext[k]);
                        k++;
                    }
                    //System.out.print(". ");
                }
            }
        }
    }
}
Сразу не хейти, программа конечно тупая, я и сам это понимаю, но меня интересуют след вещи: 1) почему у меня возникает ошибка? (да и хотелось бы вывод корректным сделать, так как не хватает в конце предложений точки и пробела.) 2) как можно усовершенствовать данную программу с помощью средства языка Java?
__________________
Помощь в написании контрольных, курсовых и дипломных работ здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
12.09.2016, 23:26
Ответы с готовыми решениями:

Фильтрация текстовой информации, подаваемой на вход (аналог grep)
В общем после процедурного С++ начали изучать Объектно ориентированную Джаву и первая задача...

Аналог grep -b на python
Всем привет.Столкнулся с такой проблемой.Есть функция def grepA(word,file,num=0): with...

Аналог grep из Linux для Windows
Кто-нибудь пробовал уже написать аналог линуксовского grep? может кто-то уже задавался этим...

grep -r
Что это? Не могу найти.

1
0 / 0 / 3
Регистрация: 22.06.2014
Сообщений: 54
17.09.2016, 20:01  [ТС] 2
Короче разобрался сам. Вот текст задачи: Необходимо реализовать консольную программу, которая бы фильтровала поток текстовой информации подаваемой на вход и на выходе показывала лишь те строчки, которые содержат слово передаваемое программе на вход в качестве аргумента.

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

решение:
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
45
46
47
48
/**
 * Created by nick on 16.09.16.
 */
import java.util.*;
import java.util.Scanner;
 
public class grep
{
        public static void main(String[] args)
        {
            System.out.print("Введите текст:");
            Scanner in = new Scanner(System.in);
            String Text = new String(in.nextLine());
            char[] CharText = Text.toCharArray();
            ArrayList<String> MassString = new ArrayList<>();
            String str = new String();
            for(int i = 0; i< CharText.length; i++)
            {
                if(CharText[i]=='.'|| CharText[i]=='!'|| CharText[i]=='?')
                {
                    str = str+ CharText[i];
                    MassString.add(str);
                    str="";
                }
                else
                {
                    if(CharText[i]==' '&& (CharText[i-1]=='.'|| CharText[i-1]=='!'|| CharText[i-1]=='?'))
                        i++;
                    str = str + CharText[i];
                }
            }
            System.out.println("Отфильтрованный текст:");
            for(String a: MassString)
            {
                int counter=0;
                for(int j =0; j < args.length; j++) {
                    if (a.toLowerCase().contains(args[j].toLowerCase()))
                        counter++;
                }
 
                if(counter==args.length) {
                    System.out.println(a);
 
                }
            }
        }
 
}
Может у кого-нибудь есть идеи, как реализовать данную задачу более изящнее?
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
17.09.2016, 20:01

Grep по списку
Есть код #!/system/bin/sh (export SHELL=/system/bin/sh...

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

Команда grep
Нужно вывести все опции команды grep,описанные в man (только ключи вида &quot;- z&quot;,без повторения и без...

Grep в Python
Нужно производить grep по множества серверов Linux с Windows. Пишу код. Но grep не хочет...


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

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru