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"

私がする必要があるのは、名前要素ごとに、対応するイベント番号を抽出してハッシュマップに配置する必要があることです。

たとえば、テキストから、名前evfwdがevent7にリンクされていることがわかるため、ハッシュマップは次のようになります

<"evfwd", 7>

同様に

<"compass", 0>

テキストを効率的に解析し、Java でそのようなハッシュマップを作成するにはどうすればよいですか?

4

2 に答える 2

4

情報を解析するには、おそらく regex (正規表現) を使用する必要があります。正規表現を使用するには、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) 最初の ( ) の内容など)

これは私が作成したばかりの正規表現で、あなたのために働くはずです:

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 つの異なる単語に解析します。最後の文字を取得し、最後の文字を読み取り、ハッシュマップの値として保持します。

次に、さらに 2 つの単語を読み取り、最後の単語を取得して、以前に読み取ったキーと値として hashmap に格納します。

ファイルの終わりに到達するまで、この関数を再帰的に適用します。

于 2012-09-06T03:08:54.427 に答える