讲师中心 微信公众号
AI工具推荐 视频效率加速

Java教程:实现字符串中唯一单词的计数方法

冬敏小哥_5499

冬敏小哥_5499

发布时间:2025-11-15 21:07:02

|

420人浏览过

|

来源于php中文网

原创

java教程:实现字符串中唯一单词的计数方法

本教程详细介绍了如何在Java中计算一个字符串中唯一单词的数量,忽略重复项。我们将利用字符串分割功能将文本拆分为单词,并结合ArrayList来高效地存储和检查单词的唯一性,最终返回唯一单词的总数,整个过程避免使用高级集合类型如HashSet。

核心思路

计算字符串中唯一单词数量的核心在于两点:

  1. 识别单词:将输入的字符串分解成独立的单词。
  2. 去重:在收集单词的过程中,只记录那些尚未出现过的单词。

为了满足“只允许使用基础功能,不使用哈希集合等高级特性”的要求,我们可以采用String类的split()方法来分割字符串,并使用ArrayList来存储和检查单词的唯一性。

实现步骤

以下是实现唯一单词计数方法的具体步骤:

Douyin Keyword Collector
Douyin Keyword Collector

通过浏览器自动化访问抖音首页,在搜索栏输入关键词并在自动化流程中收集相关关键词建议

下载

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

  1. 字符串分割:使用String.split(" ")方法将输入字符串按空格分割成一个单词数组。需要注意的是,这种简单的分割方式可能会将标点符号与单词绑定(例如 "ago," 会被视为一个单词),在更复杂的场景中可能需要更精细的预处理。
  2. 创建唯一单词列表:初始化一个空的ArrayList<String>,用于存储所有遇到的唯一单词。
  3. 遍历并检查唯一性:
    • 遍历通过split()方法得到的单词数组。
    • 对于每一个单词,在将其添加到ArrayList之前,首先检查该单词是否已经存在于列表中(使用list.contains(word)方法)。
    • 如果单词不存在且非空,则将其添加到列表中。
  4. 返回数量:遍历结束后,ArrayList中存储的就是所有唯一的单词。返回该列表的size()即可得到唯一单词的总数。

示例代码

下面是一个完整的Java方法实现,它接受一个字符串作为参数,并返回其中唯一单词的数量:

import java.util.ArrayList;
import java.util.List;

public class WordCounter {

    /**
     * 计算给定字符串中唯一单词的数量。
     * 该方法通过将字符串按空格分割,并使用ArrayList来存储和检查单词的唯一性。
     *
     * @param s 待处理的输入字符串。
     * @return 字符串中唯一单词的总数。
     */
    public static int countUniqueWords(String s) {
        // 如果字符串为空或只包含空白字符,则直接返回0
        if (s == null || s.trim().isEmpty()) {
            return 0;
        }

        // 1. 将字符串按空格分割成单词数组
        // 注意:简单的split(" ")可能会保留标点符号,例如 "ago," 会被视为一个单词。
        // 如果需要更严格的单词定义(例如,只包含字母),可能需要先去除标点符号或使用正则表达式。
        String[] words = s.split(" ");

        // 2. 创建一个列表来存储唯一单词
        List<String> uniqueWords = new ArrayList<>();

        // 3. 遍历单词数组,检查并添加唯一单词
        for (String word : words) {
            // 清理单词,例如去除首尾空格
            String cleanedWord = word.trim();

            // 忽略空字符串,这可能由多个空格或trim()操作产生
            if (cleanedWord.isEmpty()) {
                continue;
            }

            // 检查单词是否已存在于唯一单词列表中
            // 此处是大小写敏感的,"Hello"和"hello"会被视为不同的单词。
            if (!uniqueWords.contains(cleanedWord)) {
                uniqueWords.add(cleanedWord);
            }
        }

        // 4. 返回唯一单词的数量
        return uniqueWords.size();
    }

    public static void main(String[] args) {
        String input1 = "A long long time ago, I can still remember";
        int uniqueCount1 = countUniqueWords(input1);
        System.out.println("Input: "" + input1 + """);
        System.out.println("Number of unique words: " + uniqueCount1); // 预期输出: 8 (A, long, time, ago,, I, can, still, remember)

        String input2 = "Hello world hello java World";
        int uniqueCount2 = countUniqueWords(input2);
        System.out.println("Input: "" + input2 + """);
        System.out.println("Number of unique words: " + uniqueCount2); // 预期输出: 5 (Hello, world, hello, java, World)

        String input3 = "  one two   one  ";
        int uniqueCount3 = countUniqueWords(input3);
        System.out.println("Input: "" + input3 + """);
        System.out.println("Number of unique words: " + uniqueCount3); // 预期输出: 2 (one, two)

        String input4 = "";
        int uniqueCount4 = countUniqueWords(input4);
        System.out.println("Input: "" + input4 + """);
        System.out.println("Number of unique words: " + uniqueCount4); // 预期输出: 0
    }
}

运行示例代码的输出:

Input: "A long long time ago, I can still remember"
Number of unique words: 8
Input: "Hello world hello java World"
Number of unique words: 5
Input: "  one two   one  "
Number of unique words: 2
Input: ""
Number of unique words: 0

注意事项与扩展

  1. 单词定义:本教程中的split(" ")方法简单地以空格作为分隔符。这意味着像“ago,”这样的词会与“ago”被视为不同的单词,且标点符号会附着在单词上。如果需要更严格的单词定义(例如,只包含字母的单词),则需要在分割前进行预处理,例如使用正则表达式s.replaceAll("[^a-zA-Z ]", " ").trim().toLowerCase()去除标点并统一大小写,或者使用更复杂的split正则表达式如s.split("[\s.,!?]+")。
  2. 大小写敏感性:当前实现是大小写敏感的,即“Hello”和“hello”会被视为两个不同的唯一单词。如果需要实现大小写不敏感的计数,可以在将单词添加到uniqueWords列表之前,将其统一转换为小写或大写(例如cleanedWord.toLowerCase())。
  3. 性能考虑:ArrayList.contains()方法的平均时间复杂度为O(n),其中n是列表中元素的数量。因此,对于包含大量单词的非常长的字符串,此方法的整体性能可能会下降(达到O(n^2)的级别)。在允许使用更高级数据结构的情况下,使用HashSet<String>来存储唯一单词会更高效,因为HashSet的add()和contains()操作的平均时间复杂度通常为O(1)。然而,根据本教程的限制,ArrayList是可接受的基础实现。
  4. 空字符串处理:输入字符串为空或只包含空格时,方法应返回0。本示例代码已包含对这种情况的处理。

总结

通过本教程,我们学习了如何在Java中利用基础的字符串操作和ArrayList数据结构,实现一个计算字符串中唯一单词数量的方法。这个方法遵循了在不使用高级集合类(如HashSet)的前提下解决问题的要求。在实际应用中,根据对单词定义的严格程度和性能需求,可以进一步优化字符串预处理和去重机制。

热门AI工具

更多
切问学术

切问学术是一款AI论文写作工具,复旦大学NLP团队推出的AI学术智能体。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

立刻MV
立刻MV Hot

立刻MV是一款AI文本写作工具,AI 音乐视频(MV)创作工具。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

蛙蛙写作

一款AI论文写作工具,主要用于超级AI智能写作助手,适合需要提升相关任务效率的用户。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

Atoms
Atoms Hot

Atoms是一款AI智能体工具,第一支自动构建真实业务的 AI 团队。

Laper
Laper Hot

Laper是专为编剧、导演和制片人推出的 AI 原生剧本创作工具。

PixPix
PixPix Hot

PixPix是一款面向电商视觉生产的AI商品图生成工具。

相关专题

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

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

4316

2023.06.20

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

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

2861

2023.07.05

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

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

7842

2023.07.05

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

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

812

2023.08.11

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

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

520

2023.08.31

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

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

673

2023.11.13

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

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

386

2023.11.17

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

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

719

2023.12.06

OpenJDK JVM参数怎么调优
OpenJDK JVM参数怎么调优

Java应用运行缓慢,如何调整JVM参数?本专题介绍OpenJDK JVM性能调优的基本流程,涵盖性能指标确认、运行数据采集、内存配置和垃圾回收分析,帮助你先定位瓶颈,再通过对照测试验证效果,避免直接套用参数而影响应用稳定性。

60

2026.10.16

热门下载

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

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
dev.java 官方:Learn Java
dev.java 官方:Learn Java

共0课时 | 0人学习

Java JDBC数据库连接官方教程
Java JDBC数据库连接官方教程

共0课时 | 0人学习

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

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn