Java - 解析此示例数据的最佳方法

时间:2013-01-10 21:22:39

标签: java string string-matching

我有以这种形式的样本数据:

{
 ID:2
 Type:None
 Reference1:6369-545.1
 Reference2:6369-545.2
 Name:"John Smith Abbott"
 Extra:""
},
{
 ID:3
 Type:None
 Reference1:7854-568.1
 Reference2:6369-545.2
 Name:"Dave St. Ledger"
 Extra:""
},
{
 ID:4
 Type:None
 Reference1:8765-177.1
 Reference2:6369-545.2
 Name:"Martha Stone"
 Extra:""
},
{
 ID:6
 Type:None
 Reference1:9856-487.1
 Reference2:6369-545.2
 Name:"Peter O'Neill"
 Extra:""
},

还有很多记录,但我只提了一个小样本,并更改​​了一些名字。

在我看来,格式非常糟糕。它与java中的JSON解析器不兼容,因为字段没有用双引号括起来,我无法进行批量查找/替换。 此外,每条记录的末尾都没有用逗号分隔,所以虽然我可以将每条记录分成String[],但我无法将它们分开。见这里:

ID:2 Type:None Reference1:6369-545.1 Reference2:6369-545.2 Name:"John Smith Abbott" Extra:""}

通常我会split()用空格,但由于人名中有空格,所以无法做到。

我在},上进行了大量查找/替换以替换为};,就像我上面说过的那样,我能够将每条记录分开,但后来无法再进一步了解。我想我可能需要对这些数据进行更多的查找/替换操作,以使其可用。理想情况下,我希望能够在每行数据的末尾添加comma,而不会在现有的},{行中添加一个。{/ p>

最终目标是将此数据插入数据库。 它的原始文本和它的格式。我无法更改源代码以重新格式化它,但我可以对此数据执行任何操作,就像在大文本文件中一样。

2 个答案:

答案 0 :(得分:3)

这不是那么困难:

只需逐行阅读文件:

如果您读取“{”调用readObject()方法,该方法将读取到下一个(包括)“}”。

在这个readObject中:
您逐行阅读,并使用String.split()和分隔符“:”; 这样第一个存储在一个可变密钥中,而值存储在val。

String lineSplitted = line.split(":");
String key = lineSplitted[0];
String value = lineSplitted[1];

现在要么通过将键与所有可能性进行比较来找到要设置的成员,要么使用反射来获取名为“key”的字段。

答案 1 :(得分:0)

您可以使用Matcher类来分隔单个记录,然后将很容易,您可以使用':“分割数据