如何检查一个字符串中是否包含重复的字母?

6

我有点困惑,不知道如何检查一个字符串中是否包含多个相同的字母。

ArrayList<String> words = new ArrayList<String>();

words.add("zebra");
words.add("buzzer");
words.add("zappaz");

假设我只想打印出包含超过一个 "z" 的单词,因此只有 "buzzer" 和 "zappaz" 会被打印。我该怎么做?

2
你对双 Z 或任何双字母感兴趣吗? - Denys Séguret
8
你有尝试过什么吗? - fge
1
我只对字符串中出现多次的“z”感兴趣,而不是重复的字母。我有一种方法可以做到这一点,但它非常冗长和混乱,需要迭代字母的字符:/ 但我认为一定有更好的方法。 - rednaxela
4个回答

8

要测试一个字符串是否包含两个z,可以这样做:

 boolean ok = word.matches(".*z.*z.*")

1
请注意,它无法处理多行字符串。 - amit
2
@amit 鉴于我们正在谈论“单词”,我想这里没有问题。 - Denys Séguret
只是一条评论和“注释”,没有任何负面评价或投票。 - amit
@amit 不用担心。对于有兴趣的读者,为了完整起见,需要注意可以使用标志“Pattern.DOTALL”构建模式,以匹配多行“单词”。 - Denys Séguret

6

indexOf会返回字符串中某个字符的索引位置。它还可以接受一个可选参数来指定搜索的起始位置。如果没有匹配,则返回-1。所以只需使用它两次:

s.indexOf(letter, s.indexOf(letter) + 1) > -1

它有效了!

(为了效率起见,不过,可能还是查看第一个结果比较好。)


哦...我想要这顶帽子...你是怎么得到它的? - Denys Séguret
1
@dystroy:这就像是民粹主义徽章,只不过更容易获得。就这样 ;) - Ry-

4

一个聪明的解决方案可能是,删除您想搜索的字符,并将结果字符串的长度与完整字符串进行比较。

ArrayList<String> words = new ArrayList<String>();

words.add("zebra");
words.add("buzzer");
words.add("zappaz");

for (String word : words) {
  // calculate the length difference
  if (word.length() - word.replace("z", "").length() > 1) {
    System.out.println(word);
  }
}

将打印:

buzzer
zappaz

虽然不是很高效,但它能够正常工作,并且非常简单。


这是一个超级聪明的方法。 - Taslim Oseni

3
public static void main(String[] args) {

  String s = "bazzer";
  String news = s.replaceAll("z", "");

    if(news.length() < s.length() -1 ){
        System.out.println(s);
    }

  }

非常好的解决方案 :) - s_bei

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接