
在java编程中,我们经常会遇到需要从文本数据中提取特定信息的需求。一个常见的场景是,给定一个包含多个单词的句子和一个目标单词长度,我们需要找出并返回所有符合该长度的单词。虽然可以通过手动遍历字符串、判断空格来分割单词,并逐一检查其长度,但这种方法通常涉及复杂的索引管理和多层循环,代码冗长且易错。幸运的是,java提供了更为强大和简洁的工具来解决这类问题。
Java Stream API提供了一种声明式处理数据集合的方式,结合String类的split()方法,可以非常优雅地完成单词提取任务。
以下是实现这一功能的Java方法:
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"}
}
}通过String.split()方法与Java Stream API的结合,我们可以以一种声明式、高效且易于理解的方式,从字符串中提取指定长度的单词。这种方法不仅代码量少,而且具有良好的可读性和可维护性,是处理此类字符串操作的首选方案。掌握Stream API的使用,对于编写现代、高效的Java代码至关重要。
以上就是Java中高效提取字符串中指定长度单词的教程的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号