【问题标题】:Find words with 3 letters in Java在Java中查找包含3个字母的单词
【发布时间】:2015-10-08 18:43:17
【问题描述】:

我想查找每个元素中包含 3 个字母的所有单词。

this post 中,我找到了正确的正则表达式,但我知道我正在尝试让它在 Java 中工作。

Set<String> input = new HashSet<String>();
input.add("cat 123");
input.add("monkey");
input.add("dog");

Pattern p = Pattern.compile("\b[a-zA-Z]{3}\b");

for (String s : input) {
    if (p.matcher(s).matches()) {
        System.out.println(s);
    }
}

在我的情况下,我希望输出 catdog,但我只得到一个空输出。

【问题讨论】:

  • 反斜杠必须在 Java 字符串模式中转义(使用另一个反斜杠)。 \b => \\b
  • @CasimiretHippolyte 好的,在这种情况下,我只得到dog,但仍然缺少cat
  • 是的,因为猫更聪明。或者你没有使用好的方法(matches 而不是find)。
  • cat 123 是包含两个单词的字符串,因此它与您的正则表达式不匹配。如果你想找到cat...,你可能应该阅读 Java 正则表达式教程
  • 因为你打印了整个字符串。

标签: java regex set hashset


【解决方案1】:
  1. 您必须转义反斜杠,即\\b 而不是\b

    Pattern p = Pattern.compile("\\b[a-zA-Z]{3}\\b");
    
  2. 创建一个匹配器并使用findgroup 查找并显示下一个匹配的组:

    for (String s : input) {
        Matcher m = p.matcher(s);
        while (m.find()) {
            System.out.println(m.group());
        }
    }
    

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-05-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-29
    • 2015-05-09
    • 1970-01-01
    • 2015-06-22
    相关资源
    最近更新 更多