public static void countLetters (String s, char x){
int length = s.length();
int count = 0;
int index = 0;
int z = 0;
while (index < length) {
int y = s.indexOf(x, z);
z = z+1;
if(s.charAt(y)==x){
count = count + 1;
}
index = index + 1;
}
System.out.println(count);
大家好,我是java的新手,所以任何小指导都会非常感激。 我正在尝试编写一个方法来计算给定字符串和char中的字母出现次数。
目前的方法确实很重要,但并不完全相同。我被要求使用indexOf方法来解决这个问题。我遇到的问题是,如果我把文字“惊人”并且要求查找字符'a'它首先通过'a'并计算更新但是当涉及到char'm'时再次计算我不想要的更新它。
我正在使用Allen Downey的一本名为think java的书 - 练习8.3。 它不是任何作业:)。
答案 0 :(得分:0)
这样
public static void countLetters(String string, char character) {
int count = 0;
int index = 0;
while(true) {
index = string.indexOf(character, index) + 1; // +1 is to continue search
if (index == 0) //from next character after match
break;
count++;
}
System.out.println(count);
}
使用countLetters("amazingaa", 'a');
调用4
答案 1 :(得分:0)
您一次在字符串上迭代一个字符<img src="$baseURL/$imageName"/>
,但是当您调用#set($url = "$baseURL/$imageName")
时,会返回第一次出现的z = z+1
(大于s.indexOf(x, z)
) 。所以迭代将如下所示:
所以代替x
,你应该做z
,并在z = z+1
返回-1后停止迭代。
答案 2 :(得分:0)
你应该用这个:
int length = s.length();
int count = 0;
int z = 0;
while (z < length) {
int y = s.indexOf(x, z);
if(y == -1){
break;
}
z = (y == z) ? z + 1 : y + 1;
if (s.charAt(y) == x) {
count = count + 1;
}
}
System.out.print(count);
基本上当你使用s.indexOf(chr, fromIndex)
时,它检查来自指定索引的char,直到它找到它为止,这就是为什么当它在m
时它仍然检查直到它找到a
串。此外,如果找不到字符串,您应该检查-1
并且因为从索引到字符串末尾找不到字符串,所以会因为搜索结束而中断。这样可以在执行检查if(s.charAt(y) == x)
表达式z = (y == z) ? z + 1 : y + 1;
更像是if else语句。 ?
是三元运算符,是一种简短形式:
if(y == z){
z = z + 1;
}else{
z = y + 1;
}
因为如果使用表达式设置变量值的else语句是简单的,则可以使用三元运算符来保存代码行。