解析QIF文件 - .NET移植到Java

时间:2012-12-26 21:18:33

标签: java regex parsing

我有使用.NET解析.qif文件的代码。我正在尝试将此代码移植到Java,但是正在使用正则表达式进行解析的部分问题。以下是文件开头的示例:

!Type:Tag
NAdam
DSon
^
NAllison
^
NAmber
DSabrina's Sister
^
NAnthony
^

在.NET中,我可以使用此代码开始解析:

// Read the entire file
string input = reader.ReadToEnd();

// Split the file by header types
string[] transactionTypes = Regex.Split(input, @"^(!.*)$", RegexOptions.IgnoreCase | RegexOptions.Multiline | RegexOptions.IgnorePatternWhitespace);

当我调试.NET解析器时,我看到以下内容:

transactionTypes[0] = ""
transactionTypes[1] = "!Type:Tag\r"
transactionTypes[2] = "\nNAdam\r\nDSon\r\n^\r\nNAllison\r\n^NAmber\r\nDSabrina's Sister\r\nNAnthony\r\n^

在Java中,似乎总是跳过!Type:Tag行,所以我不知道要解析的类型。我在Java中尝试了各种版本的Regular Expression,包括以下内容:

String[] transactionTypes = dataToParse.split("!.*");
String[] transactionTypes = dataToParse.split("\\s*^(!.*)\\s*");
String[] transactionTypes = dataToParse.split("\\s*(?m)^(!.*)$\\s*");

当我说它跳过!Type:Tag行时,我会在调试时看到以下内容:

transactionTypes[0] = ""
transactionTypes[1] = "\nNAdam\r\nDSon\r\n^\r\nNAllison\r\n^NAmber\r\nDSabrina's Sister\r\nNAnthony\r\n^

任何帮助表示赞赏!提前谢谢!

1 个答案:

答案 0 :(得分:0)

你确定正则表达式是必要的吗?从我收集到的.qif格式来看,它看起来更像是为了逐行阅读。读一行,如果它以“!”开头它是一个标题行,然后下面的行是一个对象,一行由“^”组成,它们是对象之间的分隔符等。这个SO线程中有很多逐行文件读取示例:

How to read a large text file line by line using Java?

http://en.wikipedia.org/wiki/Quicken_Interchange_Format