我必须使用Java编写类的代码,其中字母E的出现次数被计算并打印出来(包括两种情况)。这就是我所拥有的。
String sVerse = "As we enter our centennial year we are still young ";
System.out.println(sVerse);
int len3 = sVerse.length();
int countE = 0;
for (int d = 0; d <= len3; d++){
char e = sVerse.charAt(d);
d = d + 1;
if (e == 'e' || e == 'E')
{
countE = countE + 1;
}
else
{
countE = countE;
}
}
System.out.println(countE);
代码运行,字符串打印,但在字符串打印后,我收到此错误:
java.lang.StringIndexOutOfBoundsException: String index out of range: 1258
at java.lang.String.charAt(Unknown Source)
at Unit4plus.main(Unit4plus.java:125)
答案 0 :(得分:1)
你在循环中增加d
,你不应该 - 只是让for
循环做它的事情。此外,您应该使用<
终止循环,而不是<=
:
int countE = 0;
for (int d = 0; d < len3; d++) {
char e=sVerse.charAt(d);
if (e=='e' || e=='E') {
countE++;
}
}
但坦率地说,你可以直接在字符串中流式传输字符,以获得更优雅的解决方案:
long countE = sVerse.chars().filter(c -> c == 'e' || c == 'E').count();
答案 1 :(得分:1)
你在第一个循环中的条件应该是:
d < len3
因为长度从1开始,但字符串中的字符索引是基于0的。
此外,for循环中的语句d = d + 1是无用的,因为你已经在for循环中使用
增加它,所以你会逐步迭代2。d++
答案 2 :(得分:0)
您需要更改循环的条件,因为长度是最大索引的+1。您还要增加变量的值&#34; d&#34;两次,一次定义为&#34; for&#34;循环,另一个在里面。尝试使用以下代码替换它:
String sVerse = "As we enter our centennial year we are still young";
int len3 = sVerse.length();
int countE = 0;
for (int d = 0; d < len3; d++) {
char e = sVerse.charAt(d);
if (e == 'e' || e == 'E')
countE++;
}
System.out.println(countE);