1

数字を の配列に入れることに興味がStringありますが、正規表現とグループの使用法がうまくいきません。

コード:

package regex;

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class Regex {

    public static void main(String[] args) {
        String s = "A: 123/456  BC: 78/90  NEw: 105 E: 0  BK: 10 None: 0%";
        Pattern p = Pattern.compile("(\\w+): (\\d+)");
        Matcher m = p.matcher(s);
        String[] as = new String[7];
        as[2] = m.group();  //array list??
        for (int i = 2; i < 2; i++) {
            System.out.println(as[i]);
        }
    }
}
4

4 に答える 4

1

変更する必要があります

Pattern p = Pattern.compile("(\\w+): (\\d+)");

の中へ

Pattern p = Pattern.compile("(\\w+): (\\d+/{0,1}\\d*%{0,1})");

于 2013-09-02T09:27:58.933 に答える
1

Matcher使用しようとしている方法では機能しません。このgroup()メソッドは、最後に一致したグループを返します。find()実際にマッチャーに何かを一致させるように指示するには、最初に呼び出す必要があります。find()次のようにすべての一致をループできるように、マッチャーが次の一致を見つけることができたかどうかを示すブール値を返します。

while (m.find()) {
    String text = m.group();
    // ...
}
于 2013-09-02T09:30:13.733 に答える
0

反応のためにこれをそこに投げ出そうと思っただけです:

package regex;

import java.util.AbstractMap;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class Regex {

    public static void main(String[] args) {
        List<Map.Entry> l = new ArrayList<>();
        String monitor = "A: 123/456  BC: 78/90  NEw: 105 E: 0  BK: 10 None: 0%";
        Pattern outerPattern = Pattern.compile("(\\w+): (\\d+)");
        Matcher outerMatcher = outerPattern.matcher(monitor);
        String outerGroup = null;
        int i = 0;
        Pattern innerPattern;
        Matcher innerMatcher;
        String innerGroup = null;
        while (outerMatcher.find()) {
            outerGroup = outerMatcher.group();
            System.out.println(outerGroup);
            innerPattern = Pattern.compile("(\\w+): (\\d+)");
            innerMatcher = innerPattern.matcher(outerGroup);
            while (innerMatcher.find()) {
                innerGroup = innerMatcher.group();
                System.out.println(innerGroup);
                Map.Entry<String, Integer> entr = new AbstractMap.SimpleEntry<>("exmpleString", 42);
                l.add(entr);
            }
        }
    }
}
于 2013-09-02T10:22:15.880 に答える