Java + readLine с BufferedReader - PullRequest
       7

Java + readLine с BufferedReader

0 голосов
/ 01 августа 2010

Я пытаюсь прочитать строку текста из текстового файла и поместить каждую строку в карту, чтобы я мог удалить повторяющиеся слова (например, тестовый тест) и распечатать строки без повторяющихся слов. Я, должно быть, делаю что-то не так, потому что в качестве ключа я получаю только одну строку, а каждую строку читаем по одной за раз. Какие-нибудь мысли? Спасибо.

public DeleteDup(File f) throws IOException {

    line = new HashMap<String, Integer>();
    try {
        BufferedReader in = new BufferedReader(new FileReader(f));
        Integer lineCount = 0;
        for (String s = null; (s = in.readLine()) != null;) {
            line.put(s, lineCount);
            lineCount++;
            System.out.println("s: " + s);
        }
    }
    catch(IOException e) {
         e.printStackTrace();
    }
    this.deleteDuplicates(line);
}
private Map<String, Integer> line;

Ответы [ 5 ]

3 голосов
/ 01 августа 2010

Если честно, ваш вопрос не совсем понятен - не очевидно, почему у вас есть lineCount, или что будет делать deleteDuplicates, или почему вы назвали переменную line таким образом, когда на самом деле это не строка - это карта от строк до номера последней строки, на которой появилась эта строка.

Если вам не нужны номера строк, я бы использовал Set<String>.

Однако, кроме всего прочего, если вы посмотрите на keySet из line, то будет всеми строками. Это предполагает, что текстовый файл действительно в кодировке по умолчанию для вашей системы (к сожалению, именно это использует FileReader - я обычно использую InputStreamReader и указываю кодировку явно).

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

1 голос
/ 01 августа 2010

Что я понял из вашего вопроса, это напечатать строки, в которых нет повторяющихся слов в строке.
Может быть, вы могли бы попробовать следующий фрагмент для этого., строки будут содержать строки, в которых нет повторяющихся слов.Было бы легче найти вашу проблему, если бы мы знали, что

this.deleteDuplicates(line);

пытается сделать.Может быть, это не очистка какой-либо используемой структуры данных.Следовательно, слова, проверенные в предыдущих строках, будут проверяться и для других строк, хотя их нет.

1 голос
/ 01 августа 2010

Ваш вопрос не очень понятен.

Но, просматривая фрагмент кода, я думаю, что вы пытались удалить повторяющиеся слова в каждой строке.

Следующий фрагмент кода может быть полезным.

public class StackOverflow {

    public static void main(String[] args) throws IOException {
        List<Set<String>> unique = new ArrayList<Set<String>>();

        BufferedReader reader = new BufferedReader(
                 new FileReader("C:\\temp\\testfile.txt"));

        String line =null;
        while((line = reader.readLine()) != null){

            String[] stringArr = line.split("\\s+");
            Set<String> strSet = new HashSet<String>();
            for(String tmpStr : stringArr){
                strSet.add(tmpStr);
            }
            unique.add(strSet);
        }       
    }
}
0 голосов
/ 01 августа 2010
  1. Вы печатаете каждую прочитанную строку, а не только уникальные строки.
  2. Ваш метод deleteDuplicateLines () ничего не сделает, так как в HashMap никогда не будет дубликатов.

Так что не совсем понятно, какова ваша настоящая проблема.

0 голосов
/ 01 августа 2010

Единственная проблема с вашим кодом, которую я вижу, в том, что у DeleteDup не указан тип возвращаемого значения. В противном случае код выглядит нормально и правильно читает из файла.

Пожалуйста, опубликуйте код метода deleteDuplicates и используемый файл.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...