
本教程详细介绍了如何使用java中的栈(stack)数据结构,结合stringbuilder和stringjoiner,实现对包含多个句子的字符串进行单词级别的反转。文章将分步指导,演示如何识别句子边界、存储反转后的单词,并最终构建出符合预期的反转结果,旨在提供一种高效且结构清晰的解决方案。
在编程中,我们经常会遇到需要对字符串进行操作的任务,其中之一就是反转单词的顺序。当字符串只包含一个句子时,这相对简单。然而,当字符串包含多个句子,并且要求每个句子内部的单词独立反转时,问题就变得复杂起来。我们需要一种机制来识别句子的边界(例如句号),并在遇到边界时清空已收集的单词,然后将它们反转并存储,接着处理下一个句子。
栈(Stack)是一种“后进先出”(LIFO, Last In, First Out)的数据结构,非常适合用于反转元素的顺序。当我们将单词依次推入栈中,然后从栈中弹出时,单词的顺序自然就会被反转。
例如,对于句子“Cats are cool.”:
解决多句字符串单词反转的关键在于正确识别和处理句子边界。当遍历字符串中的单词时,如果遇到一个以句号结尾的单词,这意味着一个句子的结束。此时,我们需要执行以下操作:
立即学习“Java免费学习笔记(深入)”;
为了有效地构建最终的反转字符串,我们推荐使用StringBuilder来累积反转后的句子,以及StringJoiner来方便地将栈中的单词用空格连接起来。
我们将通过两个主要方法来实现这一功能:
此方法接收一个由所有单词组成的字符串数组。它会迭代这些单词,根据是否遇到句号来决定何时将栈中的单词组装成一个句子。
import java.util.Stack;
import java.util.StringJoiner;
public class SentenceReverser {
public static String reverseSentences(String[] wordArray) {
Stack<String> stack = new Stack<>(); // 用于临时存储单词的栈
StringBuilder reversedSentences = new StringBuilder(); // 用于构建最终的反转句子字符串
for (String word : wordArray) {
if (word.endsWith(".")) {
// 遇到句号,表示一个句子结束
// 将当前单词(去除句号)推入栈中
stack.push(word.substring(0, word.length() - 1));
// 调用辅助方法创建反转后的句子,并追加到结果中
reversedSentences
.append(createSentence(stack)) // 追加反转后的句子
.append(". "); // 追加句号和空格作为句子分隔符
} else {
// 普通单词,直接推入栈中
stack.push(word);
}
}
// 返回最终构建的反转句子字符串
// 注意:如果最后一个句子没有以句号结尾,或者在循环结束后栈中仍有单词,
// 则需要在此处额外处理。本示例假设所有句子都以句号结束,且在循环结束时栈为空。
return reversedSentences.toString().trim(); // 使用trim()去除末尾可能多余的空格
}
// ... (createSentence 方法将在下一节介绍)
}这个辅助方法负责从传入的栈中逐一弹出单词,并使用StringJoiner将它们以空格为分隔符连接起来,形成一个反转后的句子。
import java.util.Stack;
import java.util.StringJoiner;
public class SentenceReverser {
// ... (reverseSentences 方法在上一节介绍)
public static String createSentence(Stack<String> stack) {
// 使用StringJoiner以空格作为分隔符连接单词
StringJoiner sentence = new StringJoiner(" ");
while (!stack.isEmpty()) {
sentence.add(stack.pop()); // 从栈中弹出单词并添加到StringJoiner
}
return sentence.toString(); // 返回组合后的句子
}
}为了演示上述方法的用法,我们可以编写一个简单的main方法来测试。
import java.util.Stack;
import java.util.StringJoiner;
public class SentenceReverser {
// ... (reverseSentences 和 createSentence 方法)
public static void main(String[] args) {
String inputString = "Cats are cool. Dogs are cool. So are turtles.";
// 将输入字符串按空格分割成单词数组
String[] words = inputString.split(" ");
System.out.println("原始字符串: " + inputString);
System.out.println("反转后结果: " + reverseSentences(words));
}
}运行结果:
原始字符串: Cats are cool. Dogs are cool. So are turtles. 反转后结果: cool are Cats. cool are Dogs. turtles are So.
通过结合使用Java的Stack、StringBuilder和StringJoiner,我们可以高效且清晰地实现对包含多个句子的字符串进行单词级别的反转。核心思想是利用栈的LIFO特性来反转单词顺序,并通过识别句子结束符来触发栈的清空与句子的构建。这种模块化的设计使得代码易于理解和维护,并能灵活应对不同复杂度的字符串处理需求。
以上就是Java教程:利用栈与StringBuilder高效反转多句字符串中的单词的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号