0

最初に一連の「+」を使用して文字列をフィルタリングするプログラムがあります。例えば:

+++Adam is working very well. 
++Adam is working well. 
+Adam is doing OK. 

特定のケース (つまり、プラス記号を 1 つだけ、プラス記号を 2 つだけ、プラス記号を 3 つだけ) だけをピックアップするにはどうすればよいですか? 通常、+ で始まるものはすべて返されます。

次の正規表現パターンをコンパイルしましたが、返されるのは 1 つだけ (通常は 2 つの ++) か、すべてです。

public static String regexpluschar = "^\\Q+\\E{1}[\\w <]";
public static String regexpluspluschar = "^\\Q+\\E{2}[\\w <]";
public static String regexpluspluspluschar = "^\\Q+\\E{3}[\\w <]";
Pattern plusplusplus = Pattern.compile(regexpluspluspluschar);
Pattern plusplus = Pattern.compile(regexpluspluschar);
Pattern plus = Pattern.compile(regexpluschar);

次に、Matcher クラスを使用して検索しようとしました。

Matcher matcherplusplusplus = plusplusplus.matcher(check);
Matcher matcherplusplus = plusplus.matcher(check);
Matcher matcherplus = plus.matcher(check);

//OK we have 3+'s
if ((matcherplusplusplus.find())==true){
System.out.println("Filtering 3 +s.");
System.out.println("filter is " + filter + " in the 3 + filter.");
String toChange = getItem(i);
setItemFiltered(i, toChange);
}

//OK - we have 2 +'s
if ((matcherplusplus.find())==true){
System.out.println("Filtering 2 +s.");
System.out.println("filter is " + filter + " in the 2 + filter.");
String toChange = getItem(i);
setItemFiltered(i, toChange);   
}

//OK - we have 1 +'s
if ((matcherplus.find())==true){
System.out.println("Filtering 1 +.");
System.out.println("filter is " + filter + " in the 1 + filter.");
String toChange = getItem(i);
setItemFiltered(i, toChange);   
}

非常に興味深いことに、上記の if は、いくつかの JTextField を循環する for ループに埋め込まれています。完全なコード: http://pastebin.ca/2199327

4

2 に答える 2

2

もっと簡単ではない理由:

public static String regexpluschar = "^\\+[\\w <]";
public static String regexpluspluschar = "^\\+{2}[\\w <]";
public static String regexpluspluspluschar = "^\\+{3}[\\w <]";

あるいは

public static String regexpluschar = "^\\+[^\\+]";
public static String regexpluspluschar = "^\\+{2}[^\\+]";
public static String regexpluspluspluschar = "^\\+{3}[^\\+]";

編集:私のテストプログラムで動作していますが、特定のコードを削除する必要がありました:

String toChange = getItem(i);
setItemFiltered(i, toChange);

証明: 私の出力は:

Filtering 3 +s.
+++Adam is working very well.  is in the 3 + filter.
Filtering 2 +s.
++Adam is working well.  is in the 2 + filter.
Filtering 1 +.
+Adam is doing OK.  is in the 1 + filter.

フィルターは機能していますが、特定のコードが機能していない可能性があります... (多分見てくださいsetItemFiltered?)

于 2012-08-30T09:46:30.440 に答える
1

私はこのようなものが簡単になると思っていました:

public static void main(String[] args) {
    Pattern pattern = Pattern.compile("^(\\+{1,3}).*");

    Matcher matcher = pattern.matcher(<your text>);
    if (matcher.matches()) {
        String pluses = matcher.group(1);
        switch (pluses.length()) {

        }
    }

}

++++This is insaneそして、それが一致しないことを確認したい場合は、パターンを次のように変更します

Pattern pattern = Pattern.compile("^(\\+{1,3})[^+].*");
于 2012-08-30T10:00:33.267 に答える