构建数据结构解析文本文件java

时间:2012-09-06 02:46:21

标签: java android string parsing design-patterns

在文本文件中我有以下文字。

add device 1: /dev/input/event7
  name:     "evfwd"
add device 2: /dev/input/event6
  name:     "aev_abs"
add device 3: /dev/input/event5
  name:     "light-prox"
add device 4: /dev/input/event4
  name:     "qtouch-touchscreen"
add device 5: /dev/input/event2
  name:     "cpcap-key"
add device 6: /dev/input/event1
  name:     "accelerometer"
add device 7: /dev/input/event0
  name:     "compass"
add device 8: /dev/input/event3
  name:     "omap-keypad"

我需要做的是,对于每个名称元素,我需要提取相应的事件编号并将它们放在一个hashmap上。

例如,从我们看到的文字名称 evfwd event7 相关联,因此hashmap将看起来像这样

<"evfwd", 7>

类似地

<"compass", 0>

如何有效地解析文本并构建类似java中的哈希图?

2 个答案:

答案 0 :(得分:4)

您应该使用正则表达式(正则表达式)来解析信息。要使用正则表达式,请查看Pattern和Matcher类,这是一个示例:

Pattern pattern = Pattern.compile("test");
Matcher matcher = pattern.matcher("some testing thing with a test in it");

然后,您可以调用matcher.find()将匹配器内容设置为下一个匹配(如果找到另一个匹配则返回true,如果它到达结尾则返回false)。

你需要一个带有所谓捕获组的正则表达式,基本上每当你把()放在正则表达式中的某些东西时,你可以调用matcher.group(index)来找到那些()的内容(应该注意的是.group) (0)返回整个东西,.group(1)内容1st()等。)

这是我刚才制作的正则表达式应该适合你:

add device \d*?: /dev/input/event(\d*?)\n name: \"(.*?)\"

这用英语说:

add device [some number]: /dev/input/event[some number, capture group #1]\n name: \"[some string, capture group #2]\"

要获取活动编号,请致电Integer.parseInt(matcher.group(1))并获取其名称,请致电matcher.group(2)

告诉我,如果有任何失败,希望我帮助:)

答案 1 :(得分:0)

我会选择基础知识。

首先编写一个读取4个字的函数,然后取第4个字。使用“/”作为分隔符将第4个单词解析为3个不同的单词。取最后一个,读取最后一个char并将其保留为hashmap的值。

然后继续阅读另外两个单词,取最后一个单词并将其存储到hashmap中作为键和您之前读取的值。

递归地应用此函数,直到到达文件末尾。