2012-12-30 43 views
2

我对如何检查一个字符串是否包含多次相同的字母有点困惑。如何检查一个字符串是否多次包含相同的字母?

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

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

比方说,我只想打印出包含不止一个“Z”任何言语,因此只能“蜂鸣器”和“zappaz”会得到印。我将如何做到这一点?

+2

您是否对z翻倍或任何加倍的字母感兴趣? –

+7

你尝试过什么吗? – fge

+1

我只对在字符串中出现多次的“z”感兴趣,而不是双字母。我有办法做到这一点,但它是非常漫长和杂乱的,它遍历字母的字符:/但我认为必须有更好的方法 – rednaxela

回答

3

一个聪明的解决办法是,除去要的字符搜索并比较结果字符串的长度与完整字符串。

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 

效率不高,但它的工作原理是非常简单的。

+3

+1或if(word.split(“z”,-1).length> 2) '更短。 –

5

要测试一个字符串包含两个Z,你可以这样做:

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

注意它失败了多行字符串 – amit

+2

@amit鉴于我们正在谈论“单词“,我想这不是一个问题 –

+0

只是一个评论,一个”笔记“,不downvoting或任何东西。 – amit

5

indexOf返回...与一个字符索引中的字符串。它还需要一个可选的参数指定搜索的位置。如果没有匹配,则返回-1。因此,只要用两次:

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

It works!

(出于效率的缘故,不过,可能还有check the first result

+0

噢......我想要这顶帽子......你是怎么得到它的? –

+1

@dystroy:就像平民主义徽章一样,除非更容易。这是所有;) – Ryan

+1

该死的......我现在试着不被接受:\ –

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

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

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

    } 
+0

非常好的解决方案:) –

相关问题