0

次のコードがあります。禁止された単語のリストから単語が存在するかどうかテキストを確認する必要があります。しかし、この単語がテキスト マッチャーに存在する場合でも、それは表示されません。コードは次のとおりです。

final ArrayList<String> regexps = config.getProperty(property);
   for (String regexp: regexps){
   Pattern pt = Pattern.compile("(" + regexp + ")", Pattern.CASE_INSENSITIVE);
   Matcher mt = pt.matcher(plainText);                        
   if (mt.find()){
      result = result + "message can't be processed because it doesn't satisfy the rule " + property;
      reason = false;
      System.out.println("reason" + mt.group() + regexp);
                        }
                    }

なにが問題ですか?このコードは、в[ыy][шs]лит[еe]にあるregexp を見つけることができません。の別の変種も試しましたが、すべて役に立ちませんregexpplainText = "Вышлите пожалуйста новый счет на оплату на Санг, пока согласовывали, уже прошли его сроки. Лиценз..."regexp

4

3 に答える 3

1

問題は別の場所にあります。

import java.util.regex.*;

public class HelloWorld {

    public static void main(String []args) {
        Pattern pt = Pattern.compile("(qwer)");
        Matcher mt = pt.matcher("asdf qwer zxcv");
        System.out.println(mt.find());
    }
}

これは true を出力します。ただし、単語境界を区切り文字として使用することもできます。

import java.util.regex.*;

public class HelloWorld {

    public static void main(String []args) {
        Pattern pt = Pattern.compile("\\bqwer\\b");
        Matcher mt = pt.matcher("asdf qwer zxcv");
        System.out.println(mt.find());
        mt = pt.matcher("asdfqwer zxcv");
        System.out.println(mt.find());
    }
}

グループ内のキーワードをキャプチャする必要がない限り、括弧は役に立ちません。しかし、あなたはすでにそれを持っています。

于 2013-06-17T15:56:56.627 に答える
0

ArrayList の組み込み関数indexOf(Object o)を使用contains(Object o)して、文字列が配列内のどこかに存在するかどうか、およびその場所を確認します。例えば

ArrayList<String> keywords = new ArrayList<String>();
keywords.add("hello");
System.out.println(keywords.contains("hello"));
System.out.println(keywords.indexOf("hello"));

出力:

0

于 2013-06-17T15:57:45.670 に答える