如何在字符串中查找整数、大写字母、小写字母、空格和数字

3
解决了,感谢所有帮助过我的人!!
我是Java语言的新手,我已经卡在这个问题上有一段时间了......每当我执行我的代码时,它会编译,但是当我运行它并输入一个字符串(任何字符串)时,我会收到以下错误:
java.lang.StringIndexOutOfBoundsException: String index out of range: at java.lang.String.charAt(unknown Source) at Reading.main(Reading.java:48)
请问有人能帮帮我吗?这是我的代码:
import java.awt.*;  
import javax.swing.*;
import java.util.*;

public class Reading{
    static Scanner input = new Scanner(System.in);
    public static void main(String [] args){
        System.out.println("Enter a string of characters: ");   
        int i, Upper=0, Lower=0, Space=0, Digits=0;
        String answer = input.nextLine();
        for(i = 0; i <= answer.length(); i++);
        {
            if(Character.isUpperCase(answer.charAt(i)))
                Upper++;
            if(Character.isLowerCase(answer.charAt(i)))
                Lower++;
            if(Character.isDigit(answer.charAt(i))) 
                Digits++;
        if (answer.charAt(i)==' ')
            Space++;
            System.out.println("There are " + Upper + " upper case letters");
            System.out.println("There are " + Lower + " lower case letters");
            System.out.println("There are " + Digits + " digits");
            System.out.println("There are " + Space + " spaces");
        }
        System.exit(0);
    }
} 

5
请将 for 循环中的 <= 替换为 <。复习一下数组的概念。 - pd30
3个回答

1

你需要改变

for (i = 0; i <= answer.length(); i++) ;

for (i = 0; i <answer.length(); i++) ;

这里没有匹配到answer.charAt(answer.length()),不仅如此

你需要移除

for(i = 0; i <= answer.length(); i++); <==remove ;

那么你的for循环应该像这样

for (i = 0; i < answer.length(); i++) {
     if (Character.isUpperCase(answer.charAt(i)))
         Upper++;
     if (Character.isLowerCase(answer.charAt(i)))
         Lower++;
     if (Character.isDigit(answer.charAt(i)))
         Digits++;
     if (i == ' ') // i is an index this should be if(answer.charAt(i)==' ')
         Space++;
 }

谢谢你的帮助!现在它运行得很好,唯一剩下的问题是空格计数器没有计算任何内容,有什么线索吗? - Tony
1
@Tony 将 if (i == ' ') 更改为 if (answer.charAt(i)==' ') - Ruchira Gayan Ranaweera

0

这是一个偏移量错误。

更改

for(i = 0; i <= answer.length(); i++);

for(i = 0; i < answer.length(); i++);

0

你会收到“超出范围”错误,因为你的索引超出了answer的索引。数组从0开始,以array.length()-1结束,所以你需要更改代码并删除=中的<=,然后它将迭代到length-1

对于空格计数器,你需要将answer的第i个字符与空格进行比较,这意味着你需要用if(answer.charAt(i) == ' ')替换if(i == ' ')

这是你想要的:

import java.awt.*;
import javax.swing.*;
import java.util.*;

/* Name of the class has to be "Main" only if the class is public. */
class Ideone
{
    static Scanner input = new Scanner(System.in);
    public static void main(String [] args)
    {
        System.out.println("Enter a string of characters: ");   
        int i, Upper=0, Lower=0, Space=0, Digits=0;
        String answer = input.nextLine();
        System.out.println("Enter a string of characters2: ");
        for(i = 0; i < answer.length(); i++);
        {
            if(Character.isUpperCase(answer.charAt(i)))
                Upper++;

            if(Character.isLowerCase(answer.charAt(i)))
                Lower++;

            if(Character.isDigit(answer.charAt(i))) 
                Digits++;

            if (answer.charAt(i)==' ')
            Space++;

             System.out.println("There are " + Upper + " upper case letters");
             System.out.println("There are " + Lower + " lower case letters");
             System.out.println("There are " + Digits + " digits");
             System.out.println("There are " + Space + " spaces");
        }
        System.exit(0);
    }

}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接