0

0

Java中高效提取字符串中指定长度单词的教程

花韻仙語

花韻仙語

发布时间:2025-09-03 19:25:19

|

976人浏览过

|

来源于php中文网

原创

Java中高效提取字符串中指定长度单词的教程

本文详细介绍了如何在Java中高效地从输入字符串中提取指定长度的单词。通过利用String.split()方法结合Java Stream API的filter()和toArray()操作,可以简洁而优雅地实现这一功能,避免了复杂的循环和手动索引管理,提高了代码的可读性和维护性。

java编程中,我们经常会遇到需要从文本数据中提取特定信息的需求。一个常见的场景是,给定一个包含多个单词的句子和一个目标单词长度,我们需要找出并返回所有符合该长度的单词。虽然可以通过手动遍历字符串、判断空格来分割单词,并逐一检查其长度,但这种方法通常涉及复杂的索引管理和多层循环,代码冗长且易错。幸运的是,java提供了更为强大和简洁的工具来解决这类问题。

使用Java Stream API高效提取指定长度单词

Java Stream API提供了一种声明式处理数据集合的方式,结合String类的split()方法,可以非常优雅地完成单词提取任务。

核心思路

  1. 分割字符串: 使用String.split(" ")方法将输入的句子分割成一个单词数组。此方法会根据空格字符将字符串拆分,并自动处理多个连续空格的情况(默认情况下会产生空字符串,但对于简单单词分割,通常效果良好)。
  2. 创建流: 将分割后的单词数组转换为一个Stream流。
  3. 过滤单词: 使用filter()操作筛选出长度与目标长度相等的单词。
  4. 收集结果: 使用toArray()操作将过滤后的流重新收集为一个String数组。

示例代码

以下是实现这一功能的Java方法:

文心快码
文心快码

文心快码(Comate)是百度推出的一款AI辅助编程工具

下载
import java.util.Arrays;
import java.util.stream.Stream;

public class WordExtractor {

    /**
     * 从给定的字符串中提取所有指定长度的单词。
     *
     * @param sentence    输入的句子,单词之间以空格分隔。
     * @param wordLength  目标单词的长度。
     * @return 包含所有指定长度单词的字符串数组。
     */
    public String[] findWords(String sentence, int wordLength) {
        // 1. 使用split(" ")将句子分割成单词数组
        //    例如:"Monday is a new day" -> {"Monday", "is", "a", "new", "day"}
        String[] words = sentence.split(" ");

        // 2. 将单词数组转换为Stream流
        // 3. 使用filter操作筛选出长度与wordLength相等的单词
        // 4. 使用toArray(String[]::new)将过滤后的单词收集回一个新的String数组
        return Arrays.stream(words)
                     .filter(word -> word.length() == wordLength)
                     .toArray(String[]::new);
    }

    public static void main(String[] args) {
        WordExtractor extractor = new WordExtractor();

        String s1 = "Monday is a new day";
        int n1 = 3; // 3字母单词
        String[] result1 = extractor.findWords(s1, n1);
        System.out.println("Input: \"" + s1 + "\", Length: " + n1 + " -> Result: " + Arrays.toString(result1)); // 预期: {"new", "day"}

        String s2 = "Monday is a new day";
        int n2 = 2; // 2字母单词
        String[] result2 = extractor.findWords(s2, n2);
        System.out.println("Input: \"" + s2 + "\", Length: " + n2 + " -> Result: " + Arrays.toString(result2)); // 预期: {"is"}

        String s3 = "hello world java programming";
        int n3 = 5; // 5字母单词
        String[] result3 = extractor.findWords(s3, n3);
        System.out.println("Input: \"" + s3 + "\", Length: " + n3 + " -> Result: " + Arrays.toString(result3)); // 预期: {"hello", "world", "java"}

        String s4 = "a quick brown fox jumps over the lazy dog";
        int n4 = 4; // 4字母单词
        String[] result4 = extractor.findWords(s4, n4);
        System.out.println("Input: \"" + s4 + "\", Length: " + n4 + " -> Result: " + Arrays.toString(result4)); // 预期: {"quick", "over", "lazy"}

        String s5 = ""; // 空字符串
        int n5 = 3;
        String[] result5 = extractor.findWords(s5, n5);
        System.out.println("Input: \"" + s5 + "\", Length: " + n5 + " -> Result: " + Arrays.toString(result5)); // 预期: {}

        String s6 = "   leading and trailing spaces   "; // 包含前后空格
        int n6 = 7;
        String[] result6 = extractor.findWords(s6, n6);
        System.out.println("Input: \"" + s6 + "\", Length: " + n6 + " -> Result: " + Arrays.toString(result6)); // 预期: {"leading", "trailing", "spaces"}
    }
}

代码解析

  • sentence.split(" "): 这是关键的第一步。它将输入的sentence字符串按照空格字符进行分割,返回一个String数组。例如,"Monday is a new day".split(" ")会得到{"Monday", "is", "a", "new", "day"}。需要注意的是,如果字符串包含多个连续空格(如"word1 word2"),split(" ")默认会将它们视为分隔符,可能会产生空字符串(如{"word1", "", "word2"})。但在本例中,filter操作会自然地排除空字符串,因为它们的长度不符合预期。如果需要更严格的空格处理,可以使用正则表达式"\\s+"来匹配一个或多个空白字符。
  • Arrays.stream(words): 将split()方法返回的String数组转换为一个Stream对象。这是使用Stream API进行链式操作的起点。
  • filter(word -> word.length() == wordLength): 这是一个中间操作。它接收一个Predicate(一个返回布尔值的函数),并只保留那些使Predicate返回true的元素。在这里,word -> word.length() == wordLength是一个Lambda表达式,用于检查每个单词的长度是否等于wordLength。
  • toArray(String[]::new): 这是一个终结操作。它将流中的所有元素收集到一个新的数组中。String[]::new是一个方法引用,它告诉toArray方法如何创建一个新的String数组来存放结果。

注意事项与最佳实践

  1. 方法命名: 采用描述性的方法名和参数名至关重要。例如,将方法命名为findWords比howManyWord更准确,因为该方法返回的是单词本身,而不是单词的数量。参数名wordLength也比n更具可读性。
  2. 输入验证: 在实际应用中,考虑对输入参数进行验证。例如,wordLength是否为非负数?sentence是否为null?虽然本例中的split()方法能较好地处理空字符串,但对于null输入,会抛出NullPointerException。
  3. 性能考量: 对于大多数常见的字符串长度和单词数量,Stream API的性能非常优秀。它在内部进行了优化,并且代码的可读性和简洁性优势显著。对于极其庞大的文本数据,可能需要考虑更底层的字符迭代或专门的文本处理库,但这超出了本教程的范围。
  4. 更复杂的分割需求: 如果单词之间不仅仅是简单空格分隔,还可能包含标点符号(如逗号、句号、问号等),或者需要处理多种空白字符,那么split()方法的正则表达式参数就需要相应调整。例如,sentence.split("[\\s.,;!?]+")可以用来分割包含空格和常见标点符号的字符串。

总结

通过String.split()方法与Java Stream API的结合,我们可以以一种声明式、高效且易于理解的方式,从字符串中提取指定长度的单词。这种方法不仅代码量少,而且具有良好的可读性和可维护性,是处理此类字符串操作的首选方案。掌握Stream API的使用,对于编写现代、高效的Java代码至关重要。

相关专题

更多
java
java

Java是一个通用术语,用于表示Java软件及其组件,包括“Java运行时环境 (JRE)”、“Java虚拟机 (JVM)”以及“插件”。php中文网还为大家带了Java相关下载资源、相关课程以及相关文章等内容,供大家免费下载使用。

837

2023.06.15

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

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

741

2023.07.05

java自学难吗
java自学难吗

Java自学并不难。Java语言相对于其他一些编程语言而言,有着较为简洁和易读的语法,本专题为大家提供java自学难吗相关的文章,大家可以免费体验。

737

2023.07.31

java配置jdk环境变量
java配置jdk环境变量

Java是一种广泛使用的高级编程语言,用于开发各种类型的应用程序。为了能够在计算机上正确运行和编译Java代码,需要正确配置Java Development Kit(JDK)环境变量。php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

397

2023.08.01

java保留两位小数
java保留两位小数

Java是一种广泛应用于编程领域的高级编程语言。在Java中,保留两位小数是指在进行数值计算或输出时,限制小数部分只有两位有效数字,并将多余的位数进行四舍五入或截取。php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

399

2023.08.02

java基本数据类型
java基本数据类型

java基本数据类型有:1、byte;2、short;3、int;4、long;5、float;6、double;7、char;8、boolean。本专题为大家提供java基本数据类型的相关的文章、下载、课程内容,供大家免费下载体验。

446

2023.08.02

java有什么用
java有什么用

java可以开发应用程序、移动应用、Web应用、企业级应用、嵌入式系统等方面。本专题为大家提供java有什么用的相关的文章、下载、课程内容,供大家免费下载体验。

430

2023.08.02

java在线网站
java在线网站

Java在线网站是指提供Java编程学习、实践和交流平台的网络服务。近年来,随着Java语言在软件开发领域的广泛应用,越来越多的人对Java编程感兴趣,并希望能够通过在线网站来学习和提高自己的Java编程技能。php中文网给大家带来了相关的视频、教程以及文章,欢迎大家前来学习阅读和下载。

16926

2023.08.03

xml格式相关教程
xml格式相关教程

本专题整合了xml格式相关教程汇总,阅读专题下面的文章了解更多详细内容。

0

2026.01.19

热门下载

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

精品课程

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

共23课时 | 2.7万人学习

C# 教程
C# 教程

共94课时 | 7万人学习

Java 教程
Java 教程

共578课时 | 47.9万人学习

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

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