Twizzl:
のは、私は違った、多くの場合、複数回出現する必要がありますが、3つの文字列があるとしましょう。
"ab"
正確に1回表示されます"cd"
正確に2回表示されます"ef"
正確に3回表示されます
のは、彼らが1つのカンマで区切られなければなら言ってみましょう。
それは次のように一致している必要があります:
ab,ef,cd,ef,cd,ef
cd,cd,ef,ab,ef,ef
それはすべきではないと一致します:
ab,cd,ef
// 短すぎるab,xx,ef,cd,ef,cd,ef
// xxは、無効ですxx,ab,cd,cd,ef,ef,ef
// xxは、無効です
見つけた:
\b(?=\w*ab)(?=\w*cd)(?=\w*ef)[abcdcdefefef]{12}\b
しかし、私は、カンマと一致することはできませんし、私が最後に文字の数を持つすべての単語を追加したくない、私は大きな文字列の多くのためにこれを使用する必要があるため、([abcdcdefefef] {12})。
手助けのためにありがとうございます!
ジョープEggen:
正規表現忘れてください。
Map<String, Long> expectedFreqTable = new HashMap<>();
expectedFreqTable .put("ab", 1L);
expectedFreqTable .put("cd", 2L);
expectedFreqTable .put("ef", 3L);
String[] words = input.split(",");
Map<String, Long> actualFreqTable = Stream.of(words)
.collect(Collectors.groupingBy(Function.identity(),
Collectors.counting()));
return expectedFreqTable.equals(actualFreqTable);
正規表現は、あまりにも複雑であり、権利を取得することは非常に難しいだろう。上記より冗長ですが、はるかに容易維持して読むことを。