我一直在尝试执行这个程序,很多人会发现它有点无用。不过我收到了这个错误:线程中的例外" main"执行时java.lang.StringIndexOutOfBoundsException。这个程序是找到元音,辅音,特殊字符等的数量,我最近得到了这个错误。请帮帮我。这是什么错误,如何从我的代码中删除它。提前谢谢。
import java.io.*;
public class numberof {
public static void main(String args[])throws IOException{
BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
System.out.println("Enter string");
String str=br.readLine();
int vowel=0,consonant=0,upcase=0,locase=0,special=0,dig=0;
int l=str.length();
for(int in=1;in<=l;in++){ //This also is being displayed as an error
char c=str.charAt(in); //This is the error Line.
if(c>=65||c<=90||c>=97||c<=123){
if(c=='a'||c=='A'||c=='e'||c=='E'||c=='o'||c=='O'|c=='u'||c=='U'){
vowel++;
if(c>=65 && c<=90){
upcase++;
}
else{
locase++;
}
}
else{
consonant++;
if(c>=65 && c<=90){
upcase++;
}
else{
locase++;
}
}
}
else if(c>=48 && c<=57){
dig++;
}
else{
special++;
}
}
System.out.println(upcase+" "+locase+" "+vowel+" "+consonant+" "+dig+" "+special);
}
}
答案 0 :(得分:2)
for(int in=1;in<=l;in++)
应该是
for(int in=0;in<l;in++)
数组索引从ZERO(in =0
开始,假设您需要第一个元素)
编辑:
l
的长度为String[]
,让我们说5分为a[0], a[1], a[2], a[3], a[4]
。
如果您观察到,现在您可以从0(或)1(或)2开始,但最大值只能达到a[4]
,当您使用in <=
时,循环将检查直到[ 5]抛出indexoutofBounds异常。
答案 1 :(得分:0)
在你的for循环中,你从索引1开始并在小于或等于。
时循环for (int in = 1; in <= l; in++) {}
这意味着你将比你想要的更多地循环2。所以它应该是:
for (int in = 0; in < l; in++) {}
数组索引从零开始,因此它从0循环到长度,而不是从1循环到长度。
另一种写作方式是这样的:
for(int i = 0; i < str.length(); i++) {}
大多数Java开发人员会发现这更容易阅读。
答案 2 :(得分:0)
你想从第一个字符开始搜索所有字符串中的元音吗?使用for(int in=0; in<l; in++)