Java — разбор текстового файла

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

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

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

function(target, dep);

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

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

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

Спасибо.


person Mike    schedule 28.04.2011    source источник
comment
В чем проблема со сканером?   -  person jitm    schedule 28.04.2011
comment
Можете ли вы вставить код, который вы написали?   -  person Laurent Pireyn    schedule 28.04.2011
comment
Нет кода для публикации. Моя первоначальная мысль состояла в том, чтобы сохранить каждую строку в строку, но, поскольку общее число в dep неизвестно, потребуется какой-то правильный цикл?   -  person Mike    schedule 28.04.2011
comment
Прочитайте файл построчно... разделите каждую строку на ':', тогда первая часть - это цель, а затем вторая часть - это все зависимости, которые можно разделить путем разделения по пробелу.   -  person Java Drinker    schedule 28.04.2011


Ответы (2)


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

So ...

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]);
}
person Brian Roach    schedule 28.04.2011
comment
Загрузить каждую строку в свою строку? Или использовать while(hasNextLine)? Я понимаю разбиение и итерацию, но как каждая строка станет отдельной строкой? - person Mike; 28.04.2011
comment
Я только что предоставил эту информацию :) - person jitm; 28.04.2011
comment
Я понимаю это сейчас. Спасибо за публикацию. - person Mike; 28.04.2011
comment
добавил FileReader и цикл. - person Brian Roach; 28.04.2011

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

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
}
person jitm    schedule 28.04.2011
comment
где должен храниться файл? в папке проекта или папке src? - person leeCoder; 29.04.2020