Разбор в 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.
}
Другие вопросы по тегам