Метод поиска строки внутри текстового файла. Затем получить следующие строки до определенного предела - PullRequest
15 голосов
/ 09 апреля 2011

Итак, вот что у меня есть:

public String[] findStudentInfo(String studentNumber) {
                Student student = new Student();
                Scanner scanner = new Scanner("Student.txt");
                // Find the line that contains student Id
                // If not found keep on going through the file
                // If it finds it stop
                // Call parseStudentInfoFromLine get the number of courses
                // Create an array (lines) of size of the number of courses plus one
                // assign the line that the student Id was found to the first index value of the array
                //assign each next line to the following index of the array up to the amount of classes - 1
                // return string array
}

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

Это мой первый пост, поэтому, если я что-то сделал не так, пожалуйста, дайте мне знать.

Ответы [ 7 ]

44 голосов
/ 09 апреля 2011

Вы можете сделать что-то вроде этого:

File file = new File("Student.txt");

try {
    Scanner scanner = new Scanner(file);

    //now read the file line by line...
    int lineNum = 0;
    while (scanner.hasNextLine()) {
        String line = scanner.nextLine();
        lineNum++;
        if(<some condition is met for the line>) { 
            System.out.println("ho hum, i found it on line " +lineNum);
        }
    }
} catch(FileNotFoundException e) { 
    //handle this
}
11 голосов
/ 15 августа 2013

Используя API ввода / вывода Apache Commons https://commons.apache.org/proper/commons-io/ Мне удалось установить это с помощью FileUtils.readFileToString(file).contains(stringToFind)

Документация для этой функции на https://commons.apache.org/proper/commons-io/javadocs/api-2.4/org/apache/commons/io/FileUtils.html#readFileToString(java.io.File)

3 голосов
/ 18 июля 2017

Вот метод Java 8 для поиска строки в текстовом файле:

for (String toFindUrl : urlsToTest) {
        streamService(toFindUrl);
    }

private void streamService(String item) {
        String tmp;
        try (Stream<String> stream = Files.lines(Paths.get(fileName))) {
           tmp = stream.filter(lines -> lines.contains(item))
                       .foreach(System.out::println);

        } catch (IOException e) {
            e.printStackTrace();
        }
    }
3 голосов
/ 09 апреля 2011

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

Scanner scanner = new Scanner("Student.txt");
String currentLine;
int lineNumber = 0;
Boolean passedLine = false;
while((currentLine = scanner.readLine()) != null)
{
    if(currentLine.indexOf("Your String"))
    {
         //Do task
         passedLine = true;
    }
    if(passedLine)
    {
       //Do other task after passing the line.
    }
    lineNumber++;
}
0 голосов
/ 06 июня 2018

Это найдет "Марк Сагал" в Student.txt. Предполагая, что Student.txt содержит

Student.txt

Amir Amiri
Mark Sagal
Juan Delacruz

Main.java

import java.io.BufferedReader;
import java.io.FileReader;
import java.util.ArrayList;

public class Main {
    public static void main(String[] args) {
        final String file = "Student.txt";
        String line = null;
        ArrayList<String> fileContents = new ArrayList<>();

        try {
            FileReader fReader = new FileReader(file);
            BufferedReader fileBuff = new BufferedReader(fReader);
            while ((line = fileBuff.readLine()) != null) {
                fileContents.add(line);
            }
            fileBuff.close();
        } catch (Exception e) {
            System.out.println(e.getMessage());
        }
        System.out.println(fileContents.contains("Mark Sagal"));
    }
}
0 голосов
/ 03 марта 2015

Вот код TextScanner

public class TextScanner {

        private static void readFile(String fileName) {
            try {
              File file = new File("/opt/pol/data22/ds_data118/0001/0025090290/2014/12/12/0029057983.ds");
              Scanner scanner = new Scanner(file);
              while (scanner.hasNext()) {
                System.out.println(scanner.next());
              }
              scanner.close();
            } catch (FileNotFoundException e) {
              e.printStackTrace();
            }
          }

          public static void main(String[] args) {
            if (args.length != 1) {
              System.err.println("usage: java TextScanner1"
                + "file location");
              System.exit(0);
            }
            readFile(args[0]);
      }
}

Он будет печатать текст с разделителями

0 голосов
/ 09 апреля 2011

Я делаю что-то подобное, но в C ++.Что вам нужно сделать, это прочитать строки по одной за раз и проанализировать их (пролистать слова по одной).У меня есть внешний цикл, который проходит по всем строкам, а внутри это еще один цикл, который проходит по всем словам.Как только нужное вам слово найдено, просто выйдите из цикла и верните счетчик или все, что вы хотите.

Это мой код.Он в основном разбирает все слова и добавляет их в «указатель».Строка, в которой находилось слово, затем добавляется к вектору и используется для ссылки на строку (содержащую имя файла, всю строку и номер строки) из проиндексированных слов.

ifstream txtFile;
txtFile.open(path, ifstream::in);
char line[200];
//if path is valid AND is not already in the list then add it
if(txtFile.is_open() && (find(textFilePaths.begin(), textFilePaths.end(), path) == textFilePaths.end())) //the path is valid
{
    //Add the path to the list of file paths
    textFilePaths.push_back(path);
    int lineNumber = 1;
    while(!txtFile.eof())
    {
        txtFile.getline(line, 200);
        Line * ln = new Line(line, path, lineNumber);
        lineNumber++;
        myList.push_back(ln);
        vector<string> words = lineParser(ln);
        for(unsigned int i = 0; i < words.size(); i++)
        {
            index->addWord(words[i], ln);
        }
    }
    result = true;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...