”工欲善其事,必先利其器。“—孔子《论语.录灵公》
首页 > 编程 > 案例研究:计算关键词

案例研究:计算关键词

发布于2024-07-31
浏览:732

Case Study: Counting Keywords

本节介绍一个计算 Java 源文件中关键字数量的应用程序。对于Java源文件中的每个单词,我们需要判断该单词是否是关键字。为了有效地处理这个问题,请将所有关键字存储在 HashSet 中,并使用 contains 方法来测试某个单词是否在关键字集中。下面的代码给出了这个程序。

package demo;
import java.util.*;
import java.io.*;

public class CountKeywords {

    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        System.out.print("Enter a Java source file: ");
        String filename = input.nextLine();

        File file = new File(filename);
        if(file.exists()) {
            try {
                System.out.println("The number of keywords in "   filename   " is "   countKeywords(file));
            } catch (Exception e) {
                System.out.println("An error occurred while counting keywords: "   e.getMessage());
            }
        } else {
            System.out.println("File "   filename   " does not exist");
        }
    }

    public static int countKeywords(File file) throws Exception {
        // Array of all Java keywords   true, false and null
        String[] keywordString = {"abstract", "assert", "boolean", "break", "byte", "case", "catch", "char", "class", "const", "continue", "default", "do", "double", "else", "enum", "extends", "for", "final", "finally", "float", "goto", "if", "implements", "import", "instanceof", "int", "interface", "long", "native", "new", "package", "private", "protected", "public", "return", "short", "static", "strictfp", "super", "switch", "synchronized", "this", "throw", "throws", "transient", "try", "void", "volatile", "while", "true", "false", "null"};

        Set keywordSet = new HashSet(Arrays.asList(keywordString));
        int count = 0;

        Scanner input = new Scanner(file);

        while(input.hasNext()) {
            String word = input.next();
            if(keywordSet.contains(word))
                count  ;
        }

        return count;
    }

}

输入Java源文件:c:\Welcome.java
c:\Welcome.java中的关键字数量为5

输入Java源文件:c:\TTT.java
文件 c:\TTT.java 不存在

程序提示用户输入 Java 源文件名(第 9 行)并读取文件名(第 10 行)。如果文件存在,则调用 countKeywords 方法统计文件中的关键字(第 15 行)。

countKeywords 方法为关键字创建一个字符串数组(第 26 行),并根据该数组创建一个哈希集(第 28 行)。然后它从文件中读取每个单词并测试该单词是否在集合中(第 35 行)。如果是,程序将计数加 1(第 36 行)。

您可以重写程序以使用LinkedHashSetTreeSetArrayListLinkedList来存储关键字。然而,使用 HashSet 对于这个程序来说是最有效的。

版本声明 本文转载于:https://dev.to/paulike/case-study-counting-keywords-4kfa?1如有侵犯,请联系[email protected]删除
最新教程 更多>
  • 插入数据时如何修复“常规错误:2006 MySQL 服务器已消失”?
    插入数据时如何修复“常规错误:2006 MySQL 服务器已消失”?
    插入记录时如何解决“一般错误:2006 MySQL 服务器已消失”介绍:将数据插入 MySQL 数据库有时会导致错误“一般错误:2006 MySQL 服务器已消失”。当与服务器的连接丢失时会出现此错误,通常是由于 MySQL 配置中的两个变量之一所致。解决方案:解决此错误的关键是调整wait_tim...
    编程 发布于2024-12-21
  • 如何使用 JavaScript 按日期键对对象数组进行排序?
    如何使用 JavaScript 按日期键对对象数组进行排序?
    使用 JavaScript 按日期键对对象数组进行排序根据特定日期值键对对象数组进行排序是一项常见任务在 JavaScript 编程中。在这种情况下,我们需要通过“updated_at”键对对象数组进行排序,该键表示日期和时间。实现此目的的最有效方法是使用 Array.sort() 方法与比较函数的...
    编程 发布于2024-12-21
  • 如何实现锚链接平滑滚动?
    如何实现锚链接平滑滚动?
    单击锚链接时平滑滚动使用锚链接导航网页时,用户期望无缝过渡到目标部分。然而,默认的滚动行为可能会很突然。本文探讨了单击锚链接时实现平滑滚动的技术。本机支持Chrome 和 Firefox 等浏览器引入了对平滑滚动的本机支持。这是通过滚动到视图时使用值为“smooth”的“behavior”属性来实现...
    编程 发布于2024-12-21
  • 如何在 PHP 中组合两个关联数组,同时保留唯一 ID 并处理重复名称?
    如何在 PHP 中组合两个关联数组,同时保留唯一 ID 并处理重复名称?
    在 PHP 中组合关联数组在 PHP 中,将两个关联数组组合成一个数组是一项常见任务。考虑以下请求:问题描述:提供的代码定义了两个关联数组,$array1 和 $array2。目标是创建一个新数组 $array3,它合并两个数组中的所有键值对。 此外,提供的数组具有唯一的 ID,而名称可能重合。要求...
    编程 发布于2024-12-21
  • 如何在 C++ 中生成随机字母数字字符串?
    如何在 C++ 中生成随机字母数字字符串?
    在 C 中生成随机字母数字字符串 创建由字母数字字符组成的随机字符串是编程中的一项常见任务。在 C 中,有多种方法可以实现此目的,每种方法都有其优点和局限性。一种简单的方法是利用查找表和 rand() 函数在表中生成随机索引。这是一个示例:#include <ctime> #includ...
    编程 发布于2024-12-21
  • Go 结构中的匿名接口如何增强代码灵活性?
    Go 结构中的匿名接口如何增强代码灵活性?
    理解结构体中的匿名接口结构体中的匿名接口的概念可能会令人困惑,尤其是在 Go 编程的上下文中。以下是它的含义及其工作原理:在提供的示例中,反向结构嵌入了一个名为 Interface 的匿名接口,该接口在 sort 包中定义。这意味着反向结构有效地“采用”了接口的方法。匿名接口的好处通过嵌入匿名接口,...
    编程 发布于2024-12-21
  • 如何在 Anaconda 环境中使用 Pip 正确安装软件包?
    如何在 Anaconda 环境中使用 Pip 正确安装软件包?
    在 Anaconda 环境中使用 Pip 安装软件包创建和激活 conda 环境允许为特定项目进行独立的 Python 安装。但是,用户在 Anaconda 环境中尝试使用 pip 安装软件包时可能会遇到问题。一个常见问题是 pip 尝试将软件包安装到系统范围的 Python 安装而不是活动环境中。...
    编程 发布于2024-12-21
  • 如何修复 macOS 上 Django 中的“配置不正确:加载 MySQLdb 模块时出错”?
    如何修复 macOS 上 Django 中的“配置不正确:加载 MySQLdb 模块时出错”?
    MySQL配置不正确:相对路径的问题在Django中运行python manage.py runserver时,可能会遇到以下错误:ImproperlyConfigured: Error loading MySQLdb module: dlopen(/Library/Python/2.7/site-...
    编程 发布于2024-12-21
  • 如何确保我的 Java JFileChooser 始终出现在前面?
    如何确保我的 Java JFileChooser 始终出现在前面?
    将JFileChooser带到所有Windows的最前面在使用Java的JFileChooser选择文件时,您可能会遇到文件选择器出现在其他窗口后面的情况,需要您最小化他们访问它。这可能是一个令人沮丧的障碍,尤其是在测试期间。此行为的原因在于 showOpenDialog() 的 API,它引用了“...
    编程 发布于2024-12-21
  • 如何在PHP中强制执行文件下载并确保用户文件安全?
    如何在PHP中强制执行文件下载并确保用户文件安全?
    在 PHP 中强制文件下载如果您需要为用户提供一种从 PHP 下载图像或任何其他类型文件的方法脚本,您可以遵循一个简单的方法。提供下载链接For您想要提供下载的每个图像或文件,包括一个指向 PHP 脚本的超链接,其代码如下:<?php // File details $file...
    编程 发布于2024-12-21
  • 为什么我的 Goroutine 的值对其他人不可见?
    为什么我的 Goroutine 的值对其他人不可见?
    这是因为go编译器优化了代码吗?问题不是Go编译器优化,而是缺乏同步。对 i 的赋值后面没有任何同步事件,因此不能保证任何其他 goroutine 都会观察到它。事实上,激进的编译器可能会删除整个 i 语句。Go 内存模型Go 内存模型指定在一个变量中读取变量的条件可以保证 goroutine 观察...
    编程 发布于2024-12-21
  • 除了“if”语句之外:还有哪些地方可以在不进行强制转换的情况下使用具有显式“bool”转换的类型?
    除了“if”语句之外:还有哪些地方可以在不进行强制转换的情况下使用具有显式“bool”转换的类型?
    无需强制转换即可上下文转换为 bool您的类定义了对 bool 的显式转换,使您能够在条件语句中直接使用其实例“t”。然而,这种显式转换提出了一个问题:“t”在哪里可以在不进行强制转换的情况下用作 bool?上下文转换场景C 标准指定了四种值可以根据上下文转换为的主要场景bool:语句:if、whi...
    编程 发布于2024-12-21
  • 在 Go 中使用 WebSocket 进行实时通信
    在 Go 中使用 WebSocket 进行实时通信
    构建需要实时更新的应用程序(例如聊天应用程序、实时通知或协作工具)需要比传统 HTTP 更快、更具交互性的通信方法。这就是 WebSockets 发挥作用的地方!今天,我们将探讨如何在 Go 中使用 WebSocket,以便您可以向应用程序添加实时功能。 在这篇文章中,我们将介绍: WebSocke...
    编程 发布于2024-12-21
  • 如何在 JavaScript 中使用数字名称访问对象属性?
    如何在 JavaScript 中使用数字名称访问对象属性?
    使用数字名称引用对象属性尽管文档建议对象文字属性名称可以是整数,但使用点语法访问这些属性(例如,me.123)失败。替代语法:数组样式访问要访问具有整数名称的对象属性,必须使用数组样式语法:me[123]此语法的行为就好像该属性是数组的元素,其中 123 是索引。String表示法或者,您可以使用字...
    编程 发布于2024-12-21
  • ## 编译器何时真正内联函数?深入探讨编译器优化。
    ## 编译器何时真正内联函数?深入探讨编译器优化。
    编译器内联函数时:深入解释在 C 语言中,编译器内联函数的能力一直是讨论的主题开发商之间。本文深入探讨了内联函数的细微差别,探讨了所涉及的底层机制和编译器优化。函数内联:编译器的自由裁量权与普遍的看法相反,函数是不仅仅基于头文件中的显式内联声明或定义进行内联。编译器具有内联它们认为必要的函数的能力,...
    编程 发布于2024-12-21

免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。

Copyright© 2022 湘ICP备2022001581号-3