0

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

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"

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

例如,从文本中我们看到名称evfwdevent7链接,因此 hashmap 将如下所示

<"evfwd", 7>

相似地

<"compass", 0>

如何有效地解析文本并在 java 中构建类似的 hashmap?

4

2 回答 2

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) 第 1 个 ( ) 的内容等)

这是我刚刚制作的一个正则表达式,它应该适合你:

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)

如果有什么失败请告诉我,希望我有所帮助:)

于 2012-09-06T03:05:39.710 回答
0

我将使用基础知识。

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

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

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

于 2012-09-06T03:08:54.427 回答