用 C 风格在 Java 中解析?

Posted

技术标签:

【中文标题】用 C 风格在 Java 中解析?【英文标题】:Parsing in Java with C style? 【发布时间】:2011-11-16 19:43:01 【问题描述】:

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

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

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

注意 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());
       
 

提前致谢:)

【问题讨论】:

【参考方案1】:

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

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

【讨论】:

【参考方案2】:

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

Java 中逐字符读取循环的样子

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

【讨论】:

【参考方案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 风格在 Java 中解析?的主要内容,如果未能解决你的问题,请参考以下文章

在 Java 中解析 INI 文件的最简单方法是啥?

在 Python 中解析 .properties 文件

如何实现用java语言读取二进制文件的内容解析后存储在链表里

Atitit.html解析器的选型&#160;jsoup&#160;nsoup&#160;,java&#160;c#&#160;.net&#160;版本

C语言解析JSON源码

java笔试之参数解析(正则匹配)