#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?