gpt4 book ai didi

java - 正则表达式 - 任意顺序的单词

转载 作者:行者123 更新时间:2023-12-02 14:01:02 26 4
gpt4 key购买 nike

假设我有 3 个字符串,它们必须出现多次,但出现的频率不同。

  1. "ab"恰好出现 1 次
  2. "cd"恰好出现 2 次
  3. "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}),因为我需要将其用于许多更大的字符串。

感谢您的帮助!

最佳答案

忘记正则表达式。

    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);

正则表达式太复杂,而且很难正确执行。上面的内容比较冗长,但更容易维护和阅读。

<小时/>

较新的 Java:

    Map<String, Long> expectedFreqTable = Map.of(
"ab", 1L,
"cd", 2L,
"ef", 3L);

关于java - 正则表达式 - 任意顺序的单词,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60657114/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com