我对如何检查String是否包含多次相同的字母感到困惑.
ArrayList<String> words = new ArrayList<String>();
words.add("zebra");
words.add("buzzer");
words.add("zappaz");
Run Code Online (Sandbox Code Playgroud)
假设我只想打印出包含多个"z"的任何单词,因此只会打印"蜂鸣器"和"zappaz".我该怎么做?
要测试字符串是否包含两个z,您可以执行以下操作:
boolean ok = word.matches(".*z.*z.*")
Run Code Online (Sandbox Code Playgroud)
indexOf返回...索引...字符串中的字符.它还需要一个可选参数来指定搜索位置.如果没有匹配,则返回-1.所以只需使用它两次:
s.indexOf(letter, s.indexOf(letter) + 1) > -1
Run Code Online (Sandbox Code Playgroud)
(但是为了效率,也可以检查第一个结果.)
一个聪明的解决方案可能是删除要搜索的字符并将结果字符串的长度与完整字符串进行比较。
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);
}
}
Run Code Online (Sandbox Code Playgroud)
将打印:
buzzer
zappaz
Run Code Online (Sandbox Code Playgroud)
效率不是很高,但它有效并且非常简单。