JAVA经典百题之统计字符

题目:输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数?

程序分析

我们需要编写一个程序,统计输入的一行字符中的英文字母、空格、数字和其他字符的个数。我们可以使用字符输入流和字符分类函数来实现这个统计过程。

解题思路

  1. 使用Java的字符输入流,逐个读取输入的字符。
  2. 对每个字符进行判断,判断其是否为英文字母、空格、数字或其他字符。
  3. 根据判断结果对相应的计数器进行增加。
  4. 输出统计结果。

方法1: 使用字符分类函数

import java.util.Scanner;

public class CharacterCounter {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.print("Enter a line of characters: ");
        String input = scanner.nextLine();

        int letterCount = 0, spaceCount = 0, digitCount = 0, otherCount = 0;

        for (char c : input.toCharArray()) {
            if (Character.isLetter(c)) {
                letterCount++;
            } else if (Character.isDigit(c)) {
                digitCount++;
            } else if (Character.isWhitespace(c)) {
                spaceCount++;
            } else {
                otherCount++;
            }
        }

        System.out.println("Letters: " + letterCount);
        System.out.println("Spaces: " + spaceCount);
        System.out.println("Digits: " + digitCount);
        System.out.println("Others: " + otherCount);
    }
}

优缺点:

  • 优点:
    • 使用了Java内置的字符分类函数,代码简洁,易于理解。
  • 缺点:
    • 可能效率略低于手动判断字符类型。

方法2: 使用ASCII码范围判断字符类型

import java.util.Scanner;

public class CharacterCounter {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.print("Enter a line of characters: ");
        String input = scanner.nextLine();

        int letterCount = 0, spaceCount = 0, digitCount = 0, otherCount = 0;

        for (char c : input.toCharArray()) {
            if ((c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z')) {
                letterCount++;
            } else if (c >= '0' && c <= '9') {
                digitCount++;
            } else if (c == ' ') {
                spaceCount++;
            } else {
                otherCount++;
            }
        }

        System.out.println("Letters: " + letterCount);
        System.out.println("Spaces: " + spaceCount);
        System.out.println("Digits: " + digitCount);
        System.out.println("Others: " + otherCount);
    }
}

优缺点:

  • 优点:
    • 使用ASCII码范围判断字符类型,比方法1效率稍高。
  • 缺点:
    • 逻辑较为繁琐,需要多次使用条件判断。

方法3: 使用正则表达式

import java.util.Scanner;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class CharacterCounter {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.print("Enter a line of characters: ");
        String input = scanner.nextLine();

        int letterCount = 0, spaceCount = 0, digitCount = 0, otherCount = 0;

        Pattern letterPattern = Pattern.compile("[a-zA-Z]");
        Pattern digitPattern = Pattern.compile("[0-9]");
        Pattern spacePattern = Pattern.compile("\\s");

        for (char c : input.toCharArray()) {
            String str = String.valueOf(c);
            Matcher letterMatcher = letterPattern.matcher(str);
            Matcher digitMatcher = digitPattern.matcher(str);
            Matcher spaceMatcher = spacePattern.matcher(str);

            if (letterMatcher.matches()) {
                letterCount++;
            } else if (digitMatcher.matches()) {
                digitCount++;
            } else if (spaceMatcher.matches()) {
                spaceCount++;
            } else {
                otherCount++;
            }
        }

        System.out.println("Letters: " + letterCount);
        System.out.println("Spaces: " + spaceCount);
        System.out.println("Digits: " + digitCount);
        System.out.println("Others: " + otherCount);
    }
}

优缺点:

  • 优点:
    • 使用正则表达式简化了字符类型判断,代码相对简洁。
  • 缺点:
    • 正则表达式可能会有一定的性能开销。

总结

推荐方法1(使用字符分类函数)作为最好的实现方式,因为它使用了Java内置的字符分类函数,代码简洁且易于理解。方法2(使用ASCII码范围判断字符类型)也是一个不错的选择,效率稍高,但可能逻辑较繁琐。方法3(使用正则表达式)虽然简化了判断逻辑,但可能会带来一定的性能开销。选择最适合具体应用场景、易于理解和维护的方法是关键。

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

高大人在上

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值