我必须计算字符在字符串中出现的次数。
我知道之前已经问过这个问题。但是,我见过的解决方案使用的命令/技术尚未在课堂上介绍过。
这是我的代码:
import java.util.Scanner;
/*
This program counts the number of occourances of a char in a string.
*/
public class LetterCounter
{
public static void main(String[] args)
{
int i, length, count=0;
String input;
char letter1, letter2;
// Create a Scanner object for keyboard input.
Scanner stdin = new Scanner(System.in);
// Get a string from user
System.out.print("Enter a string: ");
input = stdin.nextLine();
// Get a character from user
System.out.print("Enter a character: ");
letter1 = stdin.next().charAt(0);
//Determine the length of the string
length = input.length();
//Count the number of times the user selected character appears in the string
for (i = 0; i <= length; i++)
{
letter2 = input.charAt(i);
if (letter1 == letter2)
{
count++;
}
}
System.out.printf("Occurrences of a %s in %s is %d", letter1, input, count);
} }
以下是jgrasp:
的输出---- jGRASP exec:java LetterCounter 输入一个字符串:hello world 输入一个字符:l 线程“main”中的异常java.lang.StringIndexOutOfBoundsException:字符串索引超出范围:11 at java.lang.String.charAt(String.java:658) 在LetterCounter.main(LetterCounter.java:37)
---- jGRASP wedge2:进程的退出代码为1。 ---- jGRASP:操作完成。
我不明白错误。任何和所有的帮助表示赞赏。
答案 0 :(得分:1)
看起来你只是在迭代太久了:
.join()
应该是
for (int i = 0; i <= length; i++) {
...
}
我注意到你写了这行代码:
for (int i = 0; i < length; i++) {
...
}
我会避免使用count ++,你可能最终会混淆++ count。坚持以下总是好的
if (letter1 == letter2)
{
count++
}
答案 1 :(得分:0)
以下代码行发生错误 -
for (i = 0; i <= length; i++)
此处迭代长于输入长度[超出范围]。 修订后的代码将是 -
for (i = 0; i < length; i++)
还需要什么?请给我一个评论。
希望它能正常工作。