0

0

Java字符串输入中单词百分比计算教程

聖光之護

聖光之護

发布时间:2025-08-24 22:12:01

|

460人浏览过

|

来源于php中文网

原创

Java字符串输入中单词百分比计算教程

本教程详细介绍了如何在Java中处理用户输入的字符串,并计算特定类型单词的百分比。内容涵盖了用户输入处理、数组存储、正则表达式进行字符串验证、以及如何通过编写辅助方法统计符合条件的字符串数量,最终计算并展示有效单词和首字母大写单词的百分比,旨在提供一个结构清晰、易于理解的专业实现方案。

java应用程序中,经常需要从用户那里获取输入,并根据特定规则对这些输入进行分析和统计。例如,我们可能需要计算用户输入的所有字符串中,有多少是符合“单词”定义的,或者有多少单词是以大写字母开头的。本教程将引导您完成这样一个任务,提供一个健壮且易于扩展的解决方案。

1. 核心概念与技术栈

要实现字符串百分比的计算,我们将主要使用以下Java特性和技术:

  • java.util.Scanner: 用于从控制台读取用户输入。
  • 数组 (Array): 用于存储用户输入的所有字符串,以便后续统一处理。
  • 异常处理 (try-catch): 处理用户输入非数字时可能发生的 NumberFormatException。
  • 正则表达式 (Regular Expressions): 强大的模式匹配工具,用于验证字符串是否符合特定格式(例如,只包含字母,或以大写字母开头)。
  • 方法封装: 将重复的逻辑(如字符串计数)封装成独立的方法,提高代码的复用性和可读性。
  • 类型转换与格式化输出: 确保百分比计算的精度,并以友好的格式展示结果。

2. 获取用户输入数量

首先,程序需要询问用户打算输入多少个字符串。这一步需要确保用户输入的是一个有效的整数。

import java.util.Scanner;

public class StringPercentageCalculator {

    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        int numOfStrings = 0;
        boolean validInput = false;

        // 循环直到用户输入一个有效的整数
        do {
            System.out.print("请输入您要输入的字符串数量: ");
            try {
                numOfStrings = Integer.parseInt(scan.nextLine());
                validInput = true; // 输入有效,跳出循环
            } catch (NumberFormatException e) {
                System.out.println("错误: 输入的不是一个有效的数字。请重新输入。");
                validInput = false; // 输入无效,继续循环
            }
        } while (!validInput);

        // ... 后续代码
    }
}

注意事项:

  • 使用 try-catch 块捕获 NumberFormatException 是处理非数字输入的标准做法。
  • 错误提示信息应清晰明了,例如“输入的不是一个有效的数字”,而不是“Not a word”。

3. 收集所有字符串输入

在确定了字符串数量之后,程序应该循环收集用户输入的每一个字符串,并将它们存储在一个数组中。这样做的好处是,所有的输入都收集完毕后,可以统一进行分析和计算,而不是在输入过程中进行即时验证和计数。

立即学习Java免费学习笔记(深入)”;

        // ... (接上一步代码)

        String[] stringInputs = new String[numOfStrings]; // 创建字符串数组

        System.out.println("请逐一输入您的字符串:");
        for (int i = 0; i < numOfStrings; i++) {
            System.out.print("输入第 " + (i + 1) + " 个字符串: "); // 提示用户输入第i+1个字符串
            stringInputs[i] = scan.nextLine(); // 将用户输入存储到数组中
        }

        // ... 后续代码

注意事项:

  • Java数组索引是从 0 开始的,因此在循环中,i 从 0 到 numOfStrings - 1。在给用户显示提示时,可以使用 i + 1 来提供更友好的序号。
  • stringInputs 数组现在包含了所有用户输入的原始字符串,为后续的分析做好了准备。

4. 定义字符串验证规则(正则表达式)

正则表达式是进行字符串模式匹配的强大工具。我们将定义两个正则表达式来满足本教程的需求:

小羊标书
小羊标书

一键生成百页标书,让投标更简单高效

下载
  • 只包含字母的单词: ^[a-zA-Z]*$
    • ^: 匹配字符串的开始。
    • [a-zA-Z]: 匹配任何大写或小写英文字母。
    • *: 匹配前面的字符零次或多次。
    • $: 匹配字符串的结束。
    • 这个模式将匹配只由英文字母组成的字符串(包括空字符串)。如果需要匹配非空单词,可以使用 + 代替 *。
  • 以大写字母开头的单词: ^[A-Z].*
    • ^: 匹配字符串的开始。
    • [A-Z]: 匹配任何大写英文字母。
    • .: 匹配除换行符之外的任何字符。
    • *: 匹配前面的字符零次或多次。
    • 这个模式将匹配以大写字母开头,后面可以跟任意字符的字符串。

5. 统计符合条件的字符串数量

为了提高代码的复用性,我们将创建一个辅助方法 countStrings,它接受一个字符串数组和一个正则表达式模式作为参数,并返回数组中符合该模式的字符串数量。

    // ... (在 main 方法之外定义)

    /**
     * 统计字符串数组中符合指定正则表达式模式的字符串数量。
     *
     * @param strings 待统计的字符串数组。
     * @param pattern 用于匹配的正则表达式。
     * @return 符合模式的字符串数量。
     */
    private static int countStrings(String[] strings, String pattern) {
        int count = 0;
        for (String str : strings) {
            if (str != null && str.matches(pattern)) { // 检查字符串是否为null,然后进行匹配
                count++;
            }
        }
        return count;
    }

注意事项:

  • 在 str.matches(pattern) 之前添加 str != null 检查是一个良好的编程习惯,可以避免 NullPointerException。
  • 这个方法是 private static 的,意味着它只能在当前类内部使用,并且不需要创建类的实例即可调用。

6. 计算并展示结果

有了 countStrings 辅助方法,我们就可以轻松地计算出各种类型的字符串数量,并进一步计算它们的百分比。

        // ... (接上一步 main 方法代码)

        System.out.println("\n--- 分析结果 ---");
        System.out.println("总共输入的字符串数量: " + numOfStrings);

        // 计算只包含字母的单词百分比
        int validWordCount = countStrings(stringInputs, "^[a-zA-Z]*$");
        // 确保进行浮点数除法以获得精确百分比
        double percentageOfWords = (numOfStrings > 0) ? ((double) validWordCount / numOfStrings) * 100 : 0.0;
        System.out.printf("只包含字母的单词百分比: %.2f%%%n", percentageOfWords);

        // 计算以大写字母开头的单词百分比
        int startWithCapitalCount = countStrings(stringInputs, "^[A-Z].*");
        double percentageOfCapitalWords = (numOfStrings > 0) ? ((double) startWithCapitalCount / numOfStrings) * 100 : 0.0;
        System.out.printf("以大写字母开头的单词百分比: %.2f%%%n", percentageOfCapitalWords);

        scan.close(); // 关闭Scanner对象,释放资源
    }
}

注意事项:

  • 在进行百分比计算时,务必将其中一个操作数强制转换为 double 类型,以避免整数除法造成的精度丢失。例如 (double) validWordCount / numOfStrings。
  • 使用 String.format() 或 System.out.printf() 可以方便地格式化输出,例如 %.2f%% 表示保留两位小数的浮点数,并添加百分号。
  • 在分母 numOfStrings 为 0 的情况下,应避免除以零错误,因此增加了 (numOfStrings > 0) ? ... : 0.0 的条件判断。
  • 程序结束时,调用 scan.close() 关闭 Scanner 对象是一个好习惯。

7. 完整示例代码

将以上所有部分整合起来,形成一个完整的Java程序:

import java.util.Scanner;

public class StringPercentageCalculator {

    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        int numOfStrings = 0;
        boolean validInput = false;

        // 1. 获取用户输入字符串的数量
        do {
            System.out.print("请输入您要输入的字符串数量: ");
            try {
                numOfStrings = Integer.parseInt(scan.nextLine());
                validInput = true;
            } catch (NumberFormatException e) {
                System.out.println("错误: 输入的不是一个有效的数字。请重新输入。");
                validInput = false;
            }
        } while (!validInput);

        // 2. 收集所有字符串输入
        String[] stringInputs = new String[numOfStrings];
        System.out.println("\n请逐一输入您的字符串:");
        for (int i = 0; i < numOfStrings; i++) {
            System.out.print("输入第 " + (i + 1) + " 个字符串: ");
            stringInputs[i] = scan.nextLine();
        }

        // 3. 计算并展示结果
        System.out.println("\n--- 分析结果 ---");
        System.out.println("总共输入的字符串数量: " + numOfStrings);

        // 计算只包含字母的单词百分比
        int validWordCount = countStrings(stringInputs, "^[a-zA-Z]*$");
        double percentageOfWords = (numOfStrings > 0) ? ((double) validWordCount / numOfStrings) * 100 : 0.0;
        System.out.printf("只包含字母的单词百分比: %.2f%%%n", percentageOfWords);

        // 计算以大写字母开头的单词百分比
        int startWithCapitalCount = countStrings(stringInputs, "^[A-Z].*");
        double percentageOfCapitalWords = (numOfStrings > 0) ? ((double) startWithCapitalCount / numOfStrings) * 100 : 0.0;
        System.out.printf("以大写字母开头的单词百分比: %.2f%%%n", percentageOfCapitalWords);

        scan.close(); // 关闭Scanner
    }

    /**
     * 统计字符串数组中符合指定正则表达式模式的字符串数量。
     *
     * @param strings 待统计的字符串数组。
     * @param pattern 用于匹配的正则表达式。
     * @return 符合模式的字符串数量。
     */
    private static int countStrings(String[] strings, String pattern) {
        int count = 0;
        for (String str : strings) {
            if (str != null && str.matches(pattern)) {
                count++;
            }
        }
        return count;
    }
}

总结

本教程展示了如何在Java中实现一个健壮的字符串分析程序。通过分离输入收集和数据处理逻辑,并利用正则表达式进行灵活的模式匹配,我们能够有效地计算出各种类型字符串的百分比。关键点包括:正确处理用户输入异常、将所有输入存储在数组中以便统一处理、使用辅助方法封装重复逻辑、以及利用正则表达式进行高效的字符串验证。这些实践不仅提高了代码的可读性和可维护性,也为处理更复杂的文本分析任务奠定了基础。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

WorkBuddy
WorkBuddy

腾讯云推出的AI原生桌面智能体工作台

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
js正则表达式
js正则表达式

php中文网为大家提供各种js正则表达式语法大全以及各种js正则表达式使用的方法,还有更多js正则表达式的相关文章、相关下载、相关课程,供大家免费下载体验。

531

2023.06.20

正则表达式不包含
正则表达式不包含

正则表达式,又称规则表达式,,是一种文本模式,包括普通字符和特殊字符,是计算机科学的一个概念。正则表达式使用单个字符串来描述、匹配一系列匹配某个句法规则的字符串,通常被用来检索、替换那些符合某个模式的文本。php中文网给大家带来了有关正则表达式的相关教程以及文章,希望对大家能有所帮助。

258

2023.07.05

java正则表达式语法
java正则表达式语法

java正则表达式语法是一种模式匹配工具,它非常有用,可以在处理文本和字符串时快速地查找、替换、验证和提取特定的模式和数据。本专题提供java正则表达式语法的相关文章、下载和专题,供大家免费下载体验。

767

2023.07.05

java正则表达式匹配字符串
java正则表达式匹配字符串

在Java中,我们可以使用正则表达式来匹配字符串。本专题为大家带来java正则表达式匹配字符串的相关内容,帮助大家解决问题。

219

2023.08.11

正则表达式空格
正则表达式空格

正则表达式空格可以用“s”来表示,它是一个特殊的元字符,用于匹配任意空白字符,包括空格、制表符、换行符等。本专题为大家提供正则表达式相关的文章、下载、课程内容,供大家免费下载体验。

357

2023.08.31

Python爬虫获取数据的方法
Python爬虫获取数据的方法

Python爬虫可以通过请求库发送HTTP请求、解析库解析HTML、正则表达式提取数据,或使用数据抓取框架来获取数据。更多关于Python爬虫相关知识。详情阅读本专题下面的文章。php中文网欢迎大家前来学习。

293

2023.11.13

正则表达式空格如何表示
正则表达式空格如何表示

正则表达式空格可以用“s”来表示,它是一个特殊的元字符,用于匹配任意空白字符,包括空格、制表符、换行符等。想了解更多正则表达式空格怎么表示的内容,可以访问下面的文章。

245

2023.11.17

正则表达式中如何匹配数字
正则表达式中如何匹配数字

正则表达式中可以通过匹配单个数字、匹配多个数字、匹配固定长度的数字、匹配整数和小数、匹配负数和匹配科学计数法表示的数字的方法匹配数字。更多关于正则表达式的相关知识详情请看本专题下面的文章。php中文网欢迎大家前来学习。

549

2023.12.06

TypeScript类型系统进阶与大型前端项目实践
TypeScript类型系统进阶与大型前端项目实践

本专题围绕 TypeScript 在大型前端项目中的应用展开,深入讲解类型系统设计与工程化开发方法。内容包括泛型与高级类型、类型推断机制、声明文件编写、模块化结构设计以及代码规范管理。通过真实项目案例分析,帮助开发者构建类型安全、结构清晰、易维护的前端工程体系,提高团队协作效率与代码质量。

69

2026.03.13

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
React 教程
React 教程

共58课时 | 6.1万人学习

ASP 教程
ASP 教程

共34课时 | 6万人学习

Vue3.x 工具篇--十天技能课堂
Vue3.x 工具篇--十天技能课堂

共26课时 | 1.6万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号