我正在创建一个程序来计算字符串中的元音,辅音,空格和标点符号的数量。在继续讨论其他任何事情之前,我确保元音检查工作正常。我创建了一个似乎在逻辑上工作的循环,因为我通过java可视化工具运行它,所有东西都检查出来。但是,当我通过BlueJ IDE运行它时,我收到一个错误。它说:java.lang.StringIndexOutOfBoundsException:字符串索引超出范围。我不知道问题是什么,我将不胜感激任何帮助。这是java visualizer的链接,如果有人想自己测试一下,我会在下面发布代码:
private static <T> void executeScrollableQuery(@NotNull final Query query, final Consumer<T> recordConsumer) {
query.setHint(QueryHints.RESULT_SET_TYPE, ResultSetType.ForwardOnly)
.setHint(QueryHints.SCROLLABLE_CURSOR, HintValues.TRUE)
.setHint(QueryHints.MAINTAIN_CACHE, HintValues.FALSE).setHint(QueryHints.JDBC_FETCH_SIZE, 500);
ScrollableCursor cursor = null;
try {
cursor = (ScrollableCursor) query.getSingleResult();
while (cursor.hasNext()) {
recordConsumer.accept((T) cursor.next());
}
} finally {
if (cursor != null) {
cursor.close();
}
}
}
答案 0 :(得分:0)
问题出在你的&#34; for&#34;环。检查计数值是否小于str_compare值(这是给定字符串中字符的数字表示)。我认为这不是你所期待的。我建议几点做一些修改 - 它提供来自给定字符串(str_compare = user_str.charAt(count);
)的检查字符,并在每个循环count
值增加后检查此字符串中的下一个字符。在每个循环中都进行了验证,以检查当前是否到达字符串的结尾(count < user_str.length()
)
for (count = 0; count < user_str.length(); count++)
{
str_compare = user_str.charAt(count);
for (int a : vowels)
{
if (a == str_compare)
{
v_counter++;
}
}
}
现在你的程序输出看起来更好:
Enter a string.
You entered: a vowel is here
There are 6 vowels.
There are 0 consonants.
There are 0 spaces.