Нужно получить строку из файла в очередь, а не весь текст файла

#java #file-io #queue

#java #file-io #очередь

Вопрос:

У меня возникли проблемы с правильным получением одной строки текста за раз из файла в очередь, не помещая весь файл в очередь. Например, я хотел бы написать программу, которая считывает исходный файл Java в качестве аргумента и создает индекс всех идентификаторов в файле. Для каждого идентификатора выведите все строки, в которых он встречается. Для простоты мы будем рассматривать каждую строку, состоящую только из букв, цифр и символов подчеркивания, как идентификатор. Объявите сканер для чтения из исходного файла и вызывайте in.useDelimiter("[^A-Za-z0-9_] ") , затем каждый вызов next возвращает идентификатор.

 public class Main { to get added to the queue but instead the whole file text is put into the queue instead of a line at a time. Sorry if my question is unclear


// Write a program that reads a Java source file as an argument and produces an index of all
// identifiers in the file. For each identifier, print all lines in which it occurs. For simplicity,
// we will consider each string consisting only of letters, numbers, and underscores an identifier.
// Declare a Scanner in for reading from the source file and call in.useDelimiter("[^A-Za-z0-9_] ").
// Then each call to next returns an identifier.


import java.io.File;
import java.io.FileNotFoundException;
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.Queue;
import java.util.Scanner;

public class E_15 {

    public static void main(String[] args) throws FileNotFoundException
    {
        // get scanner input from file
        Scanner fileInput = new Scanner(new File ("C:/Users/ramir/IdeaProjects/PA_7/src/Main.java"));
        Queue<String> test = new LinkedList<String>();
        ArrayList<String> phrase = new ArrayList<String>();

        /*
        List<String> result = new ArrayList<String>();
        Scanner s = new Scanner(is);
        s.useDelimiter(delimiter);

        */

        // Iterates till end of file
        while (fileInput.hasNextLine())
        {
            // Here is the issue. Data will end up
            // containing the whole file instead of only that line
            String data = fileInput.nextLine();
            Scanner in = new Scanner(data);
            in.useDelimiter("[^A-Za-z0-9_] ");

            // I believe around here or before is the issue that I'm having.
            // It adds all the file instead of only that line
            // Also trying to figure out how to display each line that it's displayed on
            // What the first one should look like for example
            // 0: public occurs in:
            // public class Main {
            //   public static void main(String[] args) {

            //System.out.println(data);
            test.add(data);


            while(in.hasNext())
            {
                // Getting each phrase/word into ArrayList
                String token = in.next();
                phrase.add(token);

         
            }
            in.close();
        }

        int index = 0;
        // This part works fine
        for(String num : phrase)
        {
            // printing the key
            System.out.println(index   ": "   num   " occurs in:");

            // printing the values

       
            // This to print out what
            for(String line : test)
            {
                System.out.println(line);
            }
            System.out.println();
              index;
        }
    }
}

// Just java class get file front
// This is fine
public class Main {
    public static void main(String[] args) {
        int a_1 = 100;
        System.out.println(a_1);``
    }
}
  

Я бы хотел, чтобы она отображалась только System.out.println(a_1) потому, что строка, в которой она включена, видит это
. У меня также возникают проблемы с печатью во всех встречающихся строках.

Ответ №1:

 import java.io.*;  
import java.util.Scanner;  
public class ReadLineByLineExample2  
{  
public static void main(String args[])  
{  
try  
{  
//the file to be opened for reading  
FileInputStream fis=new FileInputStream("Demo.txt");       
Scanner sc=new Scanner(fis);    //file to be scanned  
//returns true if there is another line to read  
while(sc.hasNextLine())  
{  
System.out.println(sc.nextLine());      //returns the line that was skipped  
}  
sc.close();     //closes the scanner  
}  
catch(IOException e)  
{  
e.printStackTrace();  
}  
}  
} 
  

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