私はこのコードを使用しています
Matcher m2 = Pattern.compile("\\b[ABE]+\\b").matcher(key);
HashMap
文字 A、B、または E を含むa からキーのみを取得する
AAAAAA や EEEEE などの単語には興味がありませんが、少なくとも 2 文字 (できれば 3 文字) の単語が必要です。
正規表現を変更する方法はありますか? 誰でもこれについて洞察を提供できますか?
私はこのコードを使用しています
Matcher m2 = Pattern.compile("\\b[ABE]+\\b").matcher(key);
HashMap
文字 A、B、または E を含むa からキーのみを取得する
AAAAAA や EEEEE などの単語には興味がありませんが、少なくとも 2 文字 (できれば 3 文字) の単語が必要です。
正規表現を変更する方法はありますか? 誰でもこれについて洞察を提供できますか?
文字以外のすべてを置き換え、結果のセットを作成し、セットのサイズをテストします。
public static void main (String args[])
{
String alphabet = "ABC";
String totest = "BBA";
if (args.length == 2)
{
alphabet = args[0];
totest = args[1];
}
String cleared = totest.replaceAll ("[^" + alphabet + "]", "");
char[] ca = cleared.toCharArray ();
Set <Character> unique = new HashSet <Character> ();
for (char c: ca)
unique.add (c);
System.out.println ("Result: " + (unique.size () > 1));
}
実装例
より複雑な正規表現を使用してそれを行うことができます。
(.*A.*[BE].*|.*[BE].*A.*)|(.*B.*[AE].*|.*[AE].*B.*)|(.*E.*[BA].*|.*[BA].*E.*)
しかし、おそらく、何らかの置換を行う方が理解しやすいでしょう。たとえば、一度に 1 文字ずつ '' に置き換えるループを作成し、新しい文字列のサイズを毎回チェックします。文字列を 2 回入力すると、目的の文字が 2 つ得られます。EDIT:実際には、チェックを行う前に実行時に必要な文字のセットを知っている場合、 NullUserException は彼のコメントに正しくありました-indexOf
またはcontains
、これよりも効率的でおそらく読みやすいでしょう。
必要な文字のセットがコンパイル時に不明な場合 (または少なくとも実行時に事前に文字列をチェックする場合) は、2 番目のオプションが望ましいことに注意してください。任意の文字を探している場合は、ループ - ループを通過するwhile(str.length > 0)
回数は、取得した異なる文字の数です。
目的の文字の繰り返しを明示的にマークします。次のようになります。
\b[ABE]{1,3}\b
AAE、EEE、AEE に一致しますが、AAAA、AAEE には一致しません