Нужна помощь в чтении файла построчно - PullRequest
0 голосов
/ 06 июля 2018

Текущий код, который у меня есть, читает только последнюю строку файла. Может кто-нибудь помочь мне найти способ, чтобы код читал файл построчно?

import java.util.*;
import java.io.*;
public class Searcher extends File {

    Scanner scn;

    public Searcher(String filename) {
        super(filename);
    }

    public void search(String input)
    {

        try {
            scn = new Scanner(this);
            String data = "";

            while (scn.hasNext()) {
                data = scn.nextLine();
            }

            int count = 0, fromIndex = 0;
            while ((fromIndex = data.indexOf(input, fromIndex)) != -1) {
                count++;
                fromIndex++;
            }
            System.out.println("Total occurrences: " + count);

            scn.close();
        } catch (Exception e) {
            System.out.println("Cant find file ");
        }
    }


     public static void main(String[] args) {
         Searcher search = new Searcher("src/ihaveadream.txt");
         search.search("we");
     }

}

ценю любую помощь!

Ответы [ 3 ]

0 голосов
/ 06 июля 2018

Ваша проблема:

    while (scn.hasNext()) {
        data = scn.nextLine(); // right here
    }

каждая следующая строка заменяет предыдущую строку.

В зависимости от того, что вам нужно, вы можете: сделать все строки одной строкой

data = data + scn.nextLine();
 // another syntax to do the same:
data += scn.nextLine();

или используйте List для сохранения каждой строки как отдельного элемента:

List<String> dataList = new ArrayList<>();
while (scn.hasNext()) {
        dataList.add(scn.nextLine());
    }
0 голосов
/ 06 июля 2018

Как уже все предлагали, вы заменяете данные в вашей переменной данных в цикле while, и поскольку цикл выполняется до достижения конца файла, в переменной данных сохраняется только последняя строка, и любая дальнейшая обработка данных даст вам результаты только с последней строки, так что вы можете сделать то, что предложили все остальные, или вы можете попробовать это как альтернативное решение (закройте цикл while после проверки значений индекса):

public void search(String input)
{
    int count = 0, fromIndex = 0;  //moved outside so that we don't reset it to 0 with every iteration of the loop
    try {
        scn = new Scanner(this);
        String data = "";

        while (scn.hasNext()) {
            data = scn.nextLine();
        //} instead of here

        //int count = 0, fromIndex = 0; move these variables outside of the loop
        while ((fromIndex = data.indexOf(input, fromIndex)) != -1) {
            count++;
            fromIndex++;
        }
        } //close it here 
        System.out.println("Total occurrences: " + count);


        scn.close();
    } catch (Exception e) {
        System.out.println("Cant find file ");
    }
}
0 голосов
/ 06 июля 2018
while (scn.hasNext()) {
    data = scn.nextLine();
}

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

while (scn.hasNext()) {
    data = data + scn.nextLine();
}

Удачи.

...