5

入力ファイルがあります:

U10:%x[-2,1]
U11:%x[-1,1]
U12:%x[0,1]q
U13:%x[1,1]
U14:%x[2,1]
U15:%x[-2,1]/%x[-1,1]
U16:%x[-1,1]/%x[0,1]
U17:%x[0,1]/%x[1,1]
U18:%x[1,1]/%x[2,1]

U20:%x[-2,1]/%x[-1,1]/%x[0,1]
U21:%x[-1,1]/%x[0,1]/%x[1,1]
U22:%x[0,1]/%x[1,1]/%x[2,1]

ここで、行ごとに読み取り、次のように変数に割り当てる番号を抽出しますi,j

i=-2, j=1;
i=-1, j=1;
i=0, j=1;
i=1, j=1;
i=2, j=1;
i=-2, j=1; then i=-1, j=1;
i=-1, j=1; then i=0, j=1;
etc.

私は正規表現について考えていますが、奇妙なことに、これは一致しません:

FileReader frr = new FileReader("/Users/home/Documents/input.txt");
BufferedReader brr = new BufferedReader(frr);
String linee;

while ((linee = brr.readLine()) != null) {
    String pattern = "\\[(.*?)\\]";
    Pattern regex = Pattern.compile(pattern);               
    Matcher regexMatcher = regex.matcher(linee);                
    System.out.println(regexMatcher.group());
}
brr.close();

また、分割を使用すると、非常に奇妙な結果も返されます。

String[] listItems = linee.replaceFirst("^\\[", "").split("(\\(\\d+\\))?\\]?(\\s*,\\s*\\[?|$)");
System.out.println(listItems);

結果:

[Ljava.lang.String;@c3bb2b8

上記のタスクをどのように行う必要がありますか?

4

1 に答える 1

6

ブラケット内の 2 つの整数をキャプチャするように正規表現を切り替える必要があります。その後、regexMatcher.find()すべての一致を使用して反復処理し、int を取得できます。

String pattern = "\\[(-?\\d+),(-?\\d+)\\]";
Pattern regex = Pattern.compile(pattern);
Matcher regexMatcher = regex.matcher(line);
while (regexMatcher.find()){
    int i = Integer.valueOf(regexMatcher.group(1));
    int j = Integer.valueOf(regexMatcher.group(2));
    ...
}

これにより、一致するグループごとにiとが取得されます。j

于 2013-05-30T02:21:18.533 に答える