Разбор в Java со стилем C?
Я новичок в разборе текста Java, и мне интересно, как лучше всего проанализировать файл, когда известен формат каждой строки.
У меня есть файл, который имеет следующий формат для каждой строки:
Int, String, двойная;String, двойная;String, двойная;String, двойная;String, двойная
Обратите внимание, как String,double, действует как пара, разделенная запятой, и каждая пара разделяется точкой с запятой.
Несколько примеров:
1; искусство, 0,1; компьютер, 0,5; программирование, 0,6; Java,0,7; Unix,0,3 2;291,0.8; базы данных,0.6; компьютер, 0,2; Java,0,9;undegraduate,0,7 3, кофе, 0,5; колумбия, 0,2; Java,0,1; экспорт, 0,4; импорт, 0,5
Я использую следующий код для чтения каждой строки:
public static void main(String args[]) {
try {
// Open the file that is the first
// command line parameter
FileInputStream fstream = new FileInputStream("textfile.txt");
// Get the object of DataInputStream
DataInputStream in = new DataInputStream(fstream);
BufferedReader br = new BufferedReader(new InputStreamReader(in));
String strLine;
// Read File Line By Line
while ((strLine = br.readLine()) != null) {
// Print the content on the console
System.out.println(strLine);
}
// Close the input stream
in.close();
} catch (Exception e) {// Catch exception if any
System.err.println("Error: " + e.getMessage());
}
}
Заранее спасибо:)
3 ответа
Вы могли бы использовать Scanner
класс, для начала:
Простой текстовый сканер, который может анализировать примитивные типы и строки, используя регулярные выражения.
Вы можете предоставить шаблон и использовать сканер
String input = "fish1-1 fish2-2";
java.util.Scanner s = new java.util.Scanner(input);
s.findInLine("(\\d+)");
java.util.regex.MatchResult result = s.match();
for (int i=1; i<=result.groupCount(); i++)
System.out.println(result.group(i));
s.close();
Если вы действительно пытаетесь выполнить синтаксический анализ в стиле "C", где находится буфер, содержащий символы, накапливаемые для поля "next"? Где находится проверка, которая определяет, был ли прочитан разделитель полей, и где находится код, который сбрасывает текущее поле в правильную структуру данных после прочтения конца разделителя строки / поля?
Символьный цикл чтения в Java выглядит следующим образом
int readChar = 0;
while ((readChar = in.read()) != -1) {
// do something with the new readChar.
}