0

我是java文本解析的新手,我想知道当每行的格式已知时解析文件的最佳方法是什么。

我有一个文件,每行的格式如下:

整数;字符串,双;字符串,双;字符串,双;字符串,双;字符串,双

请注意 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;本科,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());
    }   
 }

提前致谢 :)

4

3 回答 3

4

对于初学者,您可以使用Scanner该类:

一个简单的文本扫描器,可以使用正则表达式解析原始类型和字符串。

于 2011-11-16T19:46:19.763 回答
0

您可以提供模式并使用扫描仪

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(); 
于 2011-11-16T20:22:11.717 回答
0

如果您真的尝试进行“C”样式解析,那么包含为“下一个”字段累积的字符的缓冲区在哪里?检查是否读取了字段分隔符的检查在哪里,以及在读取行尾/字段分隔符后将当前字段刷新到正确数据结构中的代码在哪里?

Java中的逐字符读取循环看起来像

int readChar = 0;
while ((readChar = in.read()) != -1) {
   // do something with the new readChar.
}
于 2011-11-16T19:51:36.047 回答