在文本文件中我有以下文字。
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中的哈希图?
答案 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中作为键和您之前读取的值。
递归地应用此函数,直到到达文件末尾。