我正在尝试编写自己的Java字数统计程序。我知道可能已经有了一种方法,但我想让它发挥作用。我在第14行遇到了一个越界错误。我尝试使用输入字来计算它在输入字符串中出现的次数。所以我要循环到stringlength
- wordlength
,但这就是问题所在。
以下是代码:
import java.util.Scanner;
public class wordcount {
public static void main(String[] args)
{
Scanner s = new Scanner(System.in);
System.out.print( "Enter word : " );
String word = s.nextLine();
Scanner t = new Scanner(System.in);
System.out.print("Enter string: ");
String string = t.nextLine();
int count = 0;
for (int i = 0; i < string.length()-word.length(); i = i+1){
String substring = string.substring(i,i+word.length());
if (match(substring, word)==true){
count += 1;
}
}
System.out.println("There are "+count+ " repetitions of the word "+word);
}
public static boolean match(String string1, String string2){
for (int i=0; i<string1.length(); i+=1){
if (string1.charAt(i)!=string2.charAt(i)){
return false;
}
}
return true;
}
}
答案 0 :(得分:0)
我没有收到越界错误,你能告诉我你用于单词和字符串的值是什么吗?
我发现了您的程序存在错误。如果word等于string,它仍会返回count 0.我建议再添加一次迭代并使用regionMatches。 RegionMatches使你的匹配方法过时,如果word.length()+ i等于或大于string.length(),则返回false,避免超出边界问题。
正如您所看到的,我还将计算移到了一个单独的方法,这将使您的代码更具可读性和可测试性。
正如克里斯蒂安指出的那样;你确实只需要一个Scanner对象。我已经调整了以下代码来反映它。
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.print("Enter word : ");
String word = sc.nextLine();
System.out.print("Enter string: ");
String string = sc.nextLine();
int count = calculateWordCount(word, string);
System.out.println("There are " + count + " repetitions of the word " + word);
}
private static int calculateWordCount(String word, String string) {
int count = 0;
for (int i = 0; i < string.length() - word.length() + 1; i++) {
if (word.regionMatches(0, string, i, word.length())) {
count++;
}
}
return count;
}
答案 1 :(得分:0)
首先,不需要两个Scanner
,您可以使用相同的Scanner
对象执行许多输入。
此外,此if
条件
if (match(substring, word) == true)
可以像
一样重写if (math(substring, word))
我还建议您使用i++
来增加循环变量。不是绝对必要的,但“几乎”是一种惯例。你可以read more about that here。
现在,关于IndexOutOfBoundsException
,我已经测试了代码,但我没有找到任何输入样本来获取它。
此外,还有一个问题,您在for
:
for (int i = 0; i < string.length() - word.length() + 1; i++) { // Add '+ 1'
String substring = string.substring(i, i + word.length());
// System.out.println(substring);
if (match(substring, word)) {
count++;
}
}
您可以通过在循环中放置 print 语句来测试它,以打印每个子字符串。