Java:如何计算字符串中的字符

时间:2017-11-15 02:21:50

标签: java

我必须计算字符在字符串中出现的次数。

我知道之前已经问过这个问题。但是,我见过的解决方案使用的命令/技术尚未在课堂上介绍过。

这是我的代码:

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:操作完成。

我不明白错误。任何和所有的帮助表示赞赏。

2 个答案:

答案 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++) 

还需要什么?请给我一个评论。

希望它能正常工作。