Java — Синтаксический анализ текстового файла

#java #parsing #file-io #java.util.scanner

#java #синтаксический анализ #файл-ввод-вывод #java.util.scanner

Вопрос:

У меня есть входной текстовый файл в этом формате:

 <target1> : <dep1> <dep2> ...
<target2> : <dep1> <dep2> ...
...
  

И метод, который принимает два параметра

 function(target, dep);
  

Мне нужно выполнить этот синтаксический анализ для вызова моего метода с каждой целью и деп, например:

 function(target1, dep1);
function(target1, dep2);
function(target1, ...);
function(target2, dep1);
function(target2, dep2);
function(target2, ...);
  

Какой был бы наиболее эффективный способ вызова function(target,dep) для каждой строки текстового файла? Я попытался пошалить со сканером и string.split, но безуспешно. Я в тупике.

Спасибо.

Комментарии:

1. В чем проблема со сканером?

2. Можете ли вы вставить написанный вами код?

3. Нет кода для публикации. Моя первоначальная мысль состояла в том, чтобы сохранить каждую строку в строку, но поскольку общее число в dep неизвестно, для этого потребуется какой-то цикл, правильно?

4. Прочитайте файл построчно… разделите каждую строку на ‘:’, тогда первая часть будет целевой, а затем вторая часть — это все dep, которые могут быть разделены разделением на пробел

Ответ №1:

  • Прочитайте строку в String myLine
  • разбить myLine на : String[] array1
  • разбить array1[1] на ' ' String[] array2
  • Выполните итерацию array2 и вызовите function(array1[0], array2[i])

Итак …

 FileReader input = new FileReader("myFile");
BufferedReader bufRead = new BufferedReader(input);
String myLine = null;

while ( (myLine = bufRead.readLine()) != null)
{    
    String[] array1 = myLine.split(":");
    // check to make sure you have valid data
    String[] array2 = array1[1].split(" ");
    for (int i = 0; i < array2.length; i  )
        function(array1[0], array2[i]);
}
  

Комментарии:

1. Загрузить каждую строку в отдельную строку? Или использовать while(hasNextLine)? Я понимаю разделение и итерацию, но как каждая строка станет отдельной строкой?

2. Я только что предоставил эту информацию 🙂

3. Теперь я это понимаю. Спасибо за публикацию.

4. добавлен FileReader цикл and.

Ответ №2:

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

 FileInputStream fstream = new FileInputStream("your file name");
// or using Scaner
DataInputStream in = new DataInputStream(fstream);
BufferedReader br = new BufferedReader(new InputStreamReader(in));
String strLine;
//Read File Line By Line
while ((strLine = br.readLine()) != null)   {
  // split string and call your function
}
  

Комментарии:

1. где должен храниться файл? в папке проекта или папке src?