假设我有3个字符串,它们必须多次出现,但经常出现不同的情况。
"ab"正好出现1 time"cd"正好2 times"ef"正好出现3次假设它们必须用一个逗号分隔。
它应该与以下内容匹配:
ab,ef,cd,ef,cd,efcd,cd,ef,ab,ef,ef它应该是而不是匹配:
ab,cd,ef //太shortab,xx,ef,cd,ef,cd,ef // xx,是invalidxx,ab,cd,cd,ef,ef,ef // xx,是无效的我发现:
\b(?=\w*ab)(?=\w*cd)(?=\w*ef)[abcdcdefefef]{12}\b但是I不能与逗号、和相匹配--我不想将所有的单词都添加到末尾的字母数(a dcff{12}),因为我需要将它用于很多更大的字符串。
谢谢你的帮助!
发布于 2020-03-12 15:40:03
忘了裁判吧。
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);Regex太复杂了,很难搞清楚。上面的内容更详细,但维护和阅读要容易得多。
新Java:
Map<String, Long> expectedFreqTable = Map.of(
"ab", 1L,
"cd", 2L,
"ef", 3L);发布于 2020-03-12 15:34:19
您可以使用一个与检查输入字符串长度相结合的查找头组合:
String[] inputs = new String[] {
"ab,ef,cd,ef,cd,ef", // should match
"cd,cd,ef,ab,ef,ef", // should match
"ab,cd,ef", // too short
"ab,xx,ef,cd,ef,cd,ef", // xx, is invalid
"xx,ab,cd,cd,ef,ef,ef" // xx, is invalid
};
List<String> list = Arrays.asList(inputs);
String regex = "(?=.*ab)(?=.*cd.*cd)(?=.*ef.*ef.*ef)[a-f]{2}(?:,[a-f]{2}){5}";
list.stream().forEach(x -> {
if (x.matches(regex)) {
System.out.println("MATCH: " + x);
}
else {
System.out.println("NO MATCH: " + x);
}
});这些指纹:
MATCH: ab,ef,cd,ef,cd,ef
MATCH: cd,cd,ef,ab,ef,ef
NO MATCH: ab,cd,ef
NO MATCH: ab,xx,ef,cd,ef,cd,ef
NO MATCH: xx,ab,cd,cd,ef,ef,efhttps://stackoverflow.com/questions/60657114
复制相似问题