Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java: Общие вопросы > Поиск слова в текстовом файле


Автор: Griphon 24.1.2009, 23:59
Добрый вечер! По заданию дано не которое слово наличие которого нужно проверить в текстовом файле .
В одной из схожих тем http://forum.vingrad.ru/forum/topic-195549/unread-1.html для этой цели рекомендовали использовать - grep (я так понял из nio) Если можно это сделать как либо иначе с минимальными затратами оперативной памяти- буду благодарен за совет.


smile 

Автор: math64 25.1.2009, 13:05
grep - отдельная утилита для поиска, часто используется d Unix/Linux, но  есть весия для Windows. Написана на C. Упомянутая в указанной теме apache lucene создает индексный файл, по которому можно быстро определить, входит ли искомое слово в проиндексированный файл.

Автор: Platon 25.1.2009, 14:44
Если без всяческих вспомогательных излишеств, то я в своем блоге посвящал тему об http://platon007.blogspot.com/2008/06/blog-post_18.html

Автор: Griphon 4.2.2009, 03:24
Нашел более простой вариант на сайте http://frolov-lib.ru/programming/javasamples/vol7/vol7_16/index.html , вроде все элементарно просто, но в моей реализации почему то не работает

Код

String s;   
String slovo="бит"  
  try {
    LineNumberReader lnr= new LineNumberReader(new BufferedReader(new FileReader("scr/test.txt")));
                            
                            while(lnr.readLine()!=null){
                                s=lnr.readLine();

                                
                                if (s.indexOf(slovo)!=-1){
                                    System.out.println("bingo");
                                }

                                else{
                                    System.out.println(" :( ");
                                    break;
                                }
                                    
 }
             catch (IOException e) {
               // TODO Auto-generated catch block
                e.printStackTrace();
        }


Хотелось бы знать  в чем ошибка в моей реализации

P.S.:
Файл додан.

Автор: Griphon 4.2.2009, 03:53
Сории, думал что нашел проблему оказалось -не так

Автор: math64 4.2.2009, 10:19
Ты пропускаешь каждую вторую строку
Код

...
while((s=lnr.readLine())!=null){
  if (s.indexOf(slovo)!=-1){
  ...

Автор: Entry_N3 1.3.2011, 16:39
Цитата(Griphon @ 4.2.2009,  03:24)
Нашел более простой вариант на сайте http://frolov-lib.ru/programming/javasamples/vol7/vol7_16/index.html , вроде все элементарно просто, но в моей реализации почему то не работает

Код

String s;   
String slovo="бит"  
  try {
    LineNumberReader lnr= new LineNumberReader(new BufferedReader(new FileReader("scr/test.txt")));
                            
                            while(lnr.readLine()!=null){
                                s=lnr.readLine();

                                
                                if (s.indexOf(slovo)!=-1){
                                    System.out.println("bingo");
                                }

                                else{
                                    System.out.println(" :( ");
                                    break;
                                }
                                    
 }
             catch (IOException e) {
               // TODO Auto-generated catch block
                e.printStackTrace();
        }


Хотелось бы знать  в чем ошибка в моей реализации

P.S.:
Файл додан.

У меня в данном случае не осуществляется сопоставление, т.к. не совпадает кодировка. Т.е. "бит" в одной кодировке, результат "s=lnr.readLine();"  - в другой. Как с этим бороться?

Автор: Skipy 1.3.2011, 19:38
Читать файл в той кодировке, в которой он записан. FileReader читает в кодировке системы по умолчанию. В памяти строки в UTF-16BE, всегда. И компилировать правильно надо, если в коде русский текст.

В общем, вот это почитайте: http://www.skipy.ru/technics/encodings.html и http://www.skipy.ru/technics/encodings_console_comp.html

Автор: Entry_N3 1.3.2011, 20:20
Skipy, в принципе, так и сделал, через 
Код

new BufferedReader(new java.io.InputStreamReader(new java.io.FileInputStream(file), "cp1251"));


А если я не знаю, в какой кодировке изначально придет файл?

Автор: _Y_ 1.3.2011, 23:25
Цитата(Entry_N3 @ 1.3.2011,  20:20)
А если я не знаю, в какой кодировке изначально придет файл?

Тогда наверное надо идти в тему алгоритмы и спрашивать как распознать кодировку по содержанию. Вопрос явно языком программирования не ограничен.

Думаю, что давно уже разработаны алгоритмы, определяющие кодировку по частоте встречаемости символов. А может и каким-либо более интеллектуальным способом, чем этот, описанный еще Конан Дойлем в рассказе про пляшуших человечков smile 

Автор: Entry_N3 2.3.2011, 16:25
_Y_, спасибо.

Еще есть мнения?  smile 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)