java统计字符字母个数

-



package 字符串;

import java.util.Scanner;

public class 统计 {
//字母个数  数字个数  空白字符个数  其他字符个数
    public static void main(String[] args) {
        // TODO 自动生成的方法存根
        Scanner sc  = new Scanner(System.in);
        String a=sc.next();
        String[] c=a.split("");
        int count1=0;//数字
        int count2=0;//字母
        int count3=0;//其他字符
        int count4=0;//空白字符
        for(int i=0;ichar b=c[i].charAt(0);
            int d=b;
            
            if(d>=48&&d<=57) {
                count1++;
            }
            else if(d>=64&&d<=90) {
                count2++;
            }
            else if((d>=1&&d<=47)||(d>=91&&d<=95)||(d>=123&&d<=127)||(d==96)) {
                count3++;
            }
            else if(d==0) {
                count4++;
            }
        }
        System.out.println("数字:"+count1);
        System.out.println("字母:"+count2);
        System.out.println("其他字符:"+count3);
        System.out.println("空白字符:"+count4);
        sc.close();
    }

}

为什么他只能输出数字的个数输出不了字母其他字母空白字符的个数?

next只能读取一个值,如有空格不会再读取,所以使用nextLine。其次字母和空白符的判断方法不对。修改如下:


public static void main(String[] args) {
           // TODO 自动生成的方法存根
           Scanner sc  = new Scanner(System.in);
           String a=sc.nextLine();
           int count1=0;//数字
           int count2=0;//字母
           int count3=0;//其他字符
           int count4=0;//空白字符
         
           //转为小写字母:
           a = a.toLowerCase();
           
           for(int i=0;i<a.length();i++) {
               char b=a.charAt(i);
               int d=b;
             
               if(d>=48&&d<=57) {
                   count1++;
               }
               else if(d>=97&&d<=122) {
                   count2++;
               }

               else if(d==32) {
                   count4++;
               }else {
                   count3++;
               }
           }
           System.out.println("数字:"+count1);
           System.out.println("字母:"+count2);
           System.out.println("其他字符:"+count3);
           System.out.println("空白字符:"+count4);
           sc.close();
    }

不能使用split("")来切分字符串,可以直接使用char数组来处理,char[] arr = str.toCharArray()

不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 这有个类似的问题, 你可以参考下: https://ask.csdn.net/questions/210933
  • 你也可以参考下这篇文章:Java输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数。
  • 除此之外, 这篇博客: Java虚拟机栈的出栈入栈流程及栈内存大小设置中的 参数设置 部分也许能够解决你的问题, 你可以仔细阅读以下内容或者直接跳转源博客中阅读:

    -Xss 为jvm启动的每个线程分配的内存大小,默认JDK1.4中是256K,JDK1.5+中是1M

    -Xss1m
    -Xss1024k
    -Xss1048576
    
  • 您还可以看一下 汪翠老师的java项目实战之欢乐斗地主游戏开发教程 毕业项目课程设计带源码课程中的 给扑克牌绑定鼠标事件实现单击可以选择出牌列表小节, 巩固相关知识点
  • 以下回答来自chatgpt:

    解决方案:

    可以通过遍历输入的字符串,判断每个字符的类型来统计字符和字母的个数。在Java中,可以使用Character类提供的方法来判断字符的类型。具体步骤如下:

    1.定义计数器变量countChar和countLetter,分别表示字符和字母的个数,初始化为0。

    2.获取输入的字符串。

    3.遍历字符串,对于字符串中的每个字符,判断它的类型:

    • 如果是字母,countLetter加1;
    • 如果是其他字符(包括数字、空格和特殊字符等),countChar加1。

    4.输出countChar和countLetter。

    下面是示例代码:

    public class CountChars {
        public static void main(String[] args) {
            int countChar = 0;  // 字符计数器
            int countLetter = 0;  // 字母计数器
            String str = "Hello, World! 123";  // 测试字符串
            for (int i = 0; i < str.length(); i++) {
                char c = str.charAt(i);
                if (Character.isLetter(c)) {
                    countLetter++;
                } else if (!Character.isWhitespace(c)) {
                    countChar++;
                }
            }
            System.out.println("字符个数:" + countChar);
            System.out.println("字母个数:" + countLetter);
        }
    }
    

    运行结果:

    字符个数:12
    字母个数:10
    

    其中,Character.isLetter(c)用于判断字符c是否是字母,返回一个boolean值;Character.isWhitespace(c)用于判断字符c是否是空格符,返回一个boolean值。


如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^