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"
4026-275085: /dev/input/event5: 0011 0008 0000001f
4026-275146: /dev/input/event5: 0000 0000 00000000
4026-494201: /dev/input/event5: 0011 0008 00000020
4026-494354: /dev/input/event5: 0000 0000 00000000

私がする必要があるのは、追加デバイスのプリアンブルを削除することです。4026-275 から始まる行が必要なだけです...つまり、

    4026-275085: /dev/input/event5: 0011 0008 0000001f
    4026-275146: /dev/input/event5: 0000 0000 00000000
    4026-494201: /dev/input/event5: 0011 0008 00000020
    4026-494354: /dev/input/event5: 0000 0000 00000000

現在、この数値は変動する可能性があります。どうすればこれを効率的に抽出できますか。プリアンブルの行番号は一定ではありません。

4

4 に答える 4

1

数字で始まる行だけを残してください。

for (String line : lines) {
    if (line.matches("^\\d+.*")) {
        System.out.println("line starts with a digit");
    }
}
于 2012-09-05T10:45:41.713 に答える
0

必要な行が常に数字で始まる場合は、次のようなものを使用して、そうであるかどうかを確認できます。

String[] lines = figureOutAWayToExtractLines();

// Iterate all lines
for(String line : lines)
    // Check if first character is a number (optionally trim whitespace)
    if(Character.isDigit(str.charAt(0)))
        // So something with it
        doSomethingWithLine(line);
于 2012-09-05T10:46:05.487 に答える
0

テキスト ファイルを 1 行ずつ読み取ります。各行について、文字列が「add device」または「\tname:」で始まる場合、それらの行は単純に無視されます。例えば:

final String line = reader.readLine();
if(line != null) {
    if(line.startsWith("add device") || line.startsWith("\tname:")) {
        // ignore
     }
     else {
        // process
     }
}
于 2012-09-05T10:47:04.753 に答える
0

正規表現で試してください:

boolean keepLine = Pattern.matches("^\d{4}-\d{6}.*", yourLine);
于 2012-09-05T10:48:08.343 に答える