Разбор в Java со стилем C? - PullRequest
0 голосов
/ 16 ноября 2011

Я новичок в разборе текста Java, и мне интересно, как лучше всего проанализировать файл, когда известен формат каждой строки.

У меня есть файл, который имеет следующий формат для каждогоline:

Int; String, double; String, double; String, double; String, double; String, double

Обратите внимание, как String, double, действует как пара, разделенная запятой икаждая пара разделяется точкой с запятой.

Несколько примеров:

1;art,0.1;computer,0.5;programming,0.6;java,0.7;unix,0.3
2;291,0.8;database,0.6;computer,0.2;java,0.9;undegraduate,0.7
3;coffee,0.5;colombia,0.2;java,0.1;export,0.4;import,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 ]

4 голосов
/ 16 ноября 2011

Вы можете использовать класс Scanner, для начинающих:

Простой текстовый сканер, который может анализировать примитивные типы и строки с помощью регулярных выражений.

0 голосов
/ 17 ноября 2011

Вы можете предоставить шаблон и использовать Сканер

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(); 
0 голосов
/ 16 ноября 2011

Если вы действительно пытаетесь выполнить синтаксический анализ стиля "C", где находится буфер, содержащий символы, накапливаемые для поля "next"?Где проверка, которая определяет, был ли прочитан разделитель полей, и где находится код, который сбрасывает текущее поле в правильную структуру данных после прочтения конца разделителя строки / поля?

Посимвольное чтениецикл в Java выглядит как

int readChar = 0;
while ((readChar = in.read()) != -1) {
   // do something with the new readChar.
}
...