Java StringIndexOutOfBound异常

Java StringIndexOutOfBound异常,java,Java,我是编程新手,我曾尝试编写一个程序,从用户那里获取字符串,并将字符串中的小写、大写、空格等数字告诉用户。但我得到一个错误,上面写着,“StringIndexOutofBond。请告诉我我在这里犯了什么错误?。谢谢 public class CharacterCount { public static void main(String args[])throws Exception{ BufferedReader br = new BufferedReader(new In

我是编程新手,我曾尝试编写一个程序,从用户那里获取字符串,并将字符串中的小写、大写、空格等数字告诉用户。但我得到一个错误,上面写着,“StringIndexOutofBond。请告诉我我在这里犯了什么错误?。谢谢

public class CharacterCount {
    public static void main(String args[])throws Exception{
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        System.out.println("Please enter you string here");
        String s = br.readLine();
        System.out.println(s);

        int upperCase = 0;
        int lowerCase = 0;
        int specialCase = 0;
        int whiteSpace = 0;
        int number = 0;

        for(int i=1;i<=s.length();i++)
        {
            char ch = s.charAt(i);
            if(Character.isAlphabetic(ch))
            {
                if(Character.isUpperCase(ch))
                {
                    upperCase++;
                }
                else
                {
                    lowerCase++;
                }
            }

            if(Character.isWhitespace(ch))
            {
                whiteSpace++;
            }
            if(Character.isDigit(ch))
            {
                number++;
            }
            else
            {
                specialCase++;
            }
        }

        System.out.println("-----------------------------------------------------------------");
        System.out.println("The following are the results:");
        System.out.println("-----------------------------------------------------------------");
        System.out.println(lowerCase+" :Lower Case Characters");
        System.out.println("-----------------------------------------------------------------");
        System.out.println(upperCase+" :Upper Case Characters");
        System.out.println("-----------------------------------------------------------------");
        System.out.println(whiteSpace+" :White Space");
        System.out.println("-----------------------------------------------------------------");
        System.out.println(specialCase+" :Special Characters");
        System.out.println("-----------------------------------------------------------------");
        System.out.println(number+" :Digits");
        System.out.println("-----------------------------------------------------------------");
        System.out.println("----------------************THE END************------------------");
        System.out.println("-----------------------------------------------------------------");

    }
}
公共类字符计数{
公共静态void main(字符串args[])引发异常{
BufferedReader br=新的BufferedReader(新的InputStreamReader(System.in));
System.out.println(“请在此处输入字符串”);
字符串s=br.readLine();
系统输出打印项次;
int大写=0;
int小写=0;
int specialCase=0;
整数空格=0;
整数=0;

对于(int i=1;i您迭代了错误的索引。Java索引从0开始,因此一个
length()
字符字符串的索引从
0
length()-1

你的循环应该是

for(int i=0;i<s.length();i++)
for(int i=0;i < s.length();i++)

for(int i=0;i
for(int i=1;i您的
for(int i=1;iJava索引从0开始,因此字符串大小永远不会超过长度-1。因此,在循环时使用

for(int i=0;i<s.length();i++)  

用于(int i=0;i你在哪里得到异常?当你问一个包含异常的问题时,总是显示完整的堆栈跟踪。不过感谢完整的程序。我很抱歉。我会从下次开始。他也应该从0开始,除非他/她故意忽略第一个。对不起,我完全错过了,我想我应该继续喝杯咖啡!
for(int i=0;i<s.length();i++)  
for(int i=1;i<s.length()-1;i++)