it-swarm.com.de

Methode zum Suchen einer Zeichenfolge in der Textdatei. Dann bringen Sie die folgenden Zeilen bis zu einer bestimmten Grenze

Also das habe ich bisher:

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
}

Ich kann herausfinden, ob eine Datei die Zeichenfolge enthält, die ich zu finden versuche, aber ich weiß nicht, wie ich die gesamte Zeile abrufen kann, in der sie sich befindet.

Dies ist mein erster Beitrag. Wenn ich etwas falsch gemacht habe, lass es mich wissen.

15
Joel Sanchez

Sie können so etwas tun:

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
}
43
Amir Afghani

Verwenden der Apache Commons IO -API https://commons.Apache.org/proper/commons-io/ Ich konnte dies mithilfe von FileUtils.readFileToString(file).contains(stringToFind) feststellen. 

Die Dokumentation zu dieser Funktion finden Sie unter https://commons.Apache.org/proper/commons-io/javadocs/api-2.4/org/Apache/commons/io/FileUtils.html#readFileToString(Java.io.File )

10
MGPJ

Haben Sie beim Lesen der Datei in Betracht gezogen, sie zeilenweise zu lesen? Auf diese Weise können Sie überprüfen, ob Ihre Zeile die Datei enthält, während Sie lesen, und Sie könnten dann die Logik ausführen, die Sie auf dieser Grundlage benötigen.

Scanner scanner = new Scanner("Student.txt");
String currentLine;

while((currentLine = scanner.readLine()) != null)
{
    if(currentLine.indexOf("Your String"))
    {
         //Perform logic
    }
}

Sie können eine Variable verwenden, um die Zeilennummer zu speichern, oder Sie haben auch einen booleschen Wert, der angibt, ob Sie die Zeile mit der Zeichenfolge übergeben haben:

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++;
}
3
Rion Williams

Hier ist eine Java 8-Methode zum Suchen einer Zeichenfolge in einer Textdatei:

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();
        }
    }
1
Amir Amiri

Ich mache etwas ähnliches aber in C++. Was Sie tun müssen, ist, die Zeilen einzeln zu lesen und sie zu analysieren (gehen Sie die Wörter einzeln durch). Ich habe eine Außenschleife, die über alle Zeilen geht und im Inneren ist eine weitere Schleife, die über alle Wörter geht. Sobald das gewünschte Wort gefunden wurde, beenden Sie einfach die Schleife und geben Sie einen Zähler oder was auch immer Sie möchten zurück.

Das ist mein Code. Es analysiert im Grunde alle Wörter und fügt sie dem "Index" hinzu. Die Zeile, in der sich Word befand, wird dann zu einem Vektor hinzugefügt und zur Referenzierung der Zeile verwendet (enthält den Namen der Datei, die gesamte Zeile und die Zeilennummer) der indizierten Wörter.

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;
}
0
Pete

Dies wird "Mark Sagal" in Student.txt finden. Angenommen, Student.txt enthält

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
Mark