我有使用.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中尝试了不同版本的正则表达式,包括:
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^如有任何帮助,我们不胜感激!提前谢谢你!
发布于 2013-10-12 12:20:51
您确定这需要使用正则表达式吗?从我收集的关于.qif格式的信息来看,它看起来更像是为逐行阅读而设计的。读一行,如果它以"!“开头。这是一个标题行,然后下面的行是一个对象,由"^“组成的行是对象之间的分隔符,等等。在这个SO线程中,有很多逐行文件读取示例:
How to read a large text file line by line using Java?
http://en.wikipedia.org/wiki/Quicken_Interchange_Format
https://stackoverflow.com/questions/14046384
复制相似问题