web-dev-qa-db-fra.com

Méthode pour rechercher une chaîne à l'intérieur du fichier texte. Puis obtenir les lignes suivantes jusqu'à une certaine limite

Donc voici ce que j'ai jusqu'ici:

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
}

Je sais comment trouver si un fichier contient la chaîne que je cherche à trouver, mais je ne sais pas comment récupérer toute la ligne dans laquelle se trouve son fichier.

C'est la première fois que je poste, alors si j'ai quelque chose de mal, merci de me le faire savoir.

15
Joel Sanchez

Vous pouvez faire quelque chose comme ça:

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

Utilisation de l'API IO Apache Commons https://commons.Apache.org/proper/commons-io/ J'ai pu établir ceci à l'aide de FileUtils.readFileToString(file).contains(stringToFind) 

La documentation de cette fonction se trouve à https://commons.Apache.org/proper/commons-io/javadocs/api-2.4/org/Apache/commons/io/FileUtils.html#readFileToString(Java.io.File )

10
MGPJ

Lorsque vous lisez le fichier, avez-vous envisagé de le lire ligne par ligne? Cela vous permettrait de vérifier si votre ligne contient le fichier en cours de lecture, et vous pourrez alors exécuter toute la logique dont vous avez besoin à partir de cela.

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

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

Vous pouvez utiliser une variable pour contenir le numéro de ligne ou un booléen indiquant si vous avez passé la ligne contenant votre chaîne:

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

Voici une méthode Java 8 pour trouver une chaîne dans un fichier texte:

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

Je fais quelque chose de similaire mais en C++. Ce que vous devez faire est de lire les lignes une par une et de les analyser (passez en revue les mots un par un). J'ai une boucle externe qui parcourt toutes les lignes et à l'intérieur se trouve une autre boucle qui recouvre tous les mots. Une fois que le mot dont vous avez besoin est trouvé, sortez simplement de la boucle et renvoyez un compteur ou ce que vous voulez.

Ceci est mon code. Fondamentalement, il analyse tous les mots et les ajoute à "l'index". La ligne dans laquelle Word se trouvait est ensuite ajoutée à un vecteur et utilisée pour référencer la ligne (contenant le nom du fichier, la ligne entière et le numéro de la ligne) à partir des mots indexés.

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

Cela trouvera "Mark Sagal" dans Student.txt. En supposant que Student.txt contienne

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