
本文详细介绍了如何利用java中的`stack`、`stringbuilder`和`stringjoiner`来对包含多个句子的文本进行词语逆序处理。文章从识别句末标点符号开始,逐步构建了一个高效的算法,通过将单词压入栈中,并在遇到句号时将栈内单词弹出并逆序重组成句子,最终实现了对每个句子独立进行词语逆序,并保留原始句子的结构。
在文本处理中,一个常见的需求是将句子中的词语进行逆序排列。当处理的文本包含多个句子时,挑战在于如何确保每个句子独立地进行词语逆序,而不是将整个文本视为一个整体进行逆序。本文将详细阐述如何利用Java的Stack、StringBuilder和StringJoiner等核心数据结构和工具,实现这一功能。
要实现多句文本的词语逆序,我们需要以下几个关键组件:
整个算法可以分为两个主要部分:主处理逻辑(reverseSentences方法)和辅助的句子构建逻辑(createSentence方法)。
这个方法负责遍历输入的词语数组,识别句子的边界,并协调栈的操作以及最终结果的构建。
立即学习“Java免费学习笔记(深入)”;
步骤:
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);
}
}
// 处理最后一个句子后可能剩余的词语(如果文本不以句号结尾)
// 在本例中,假设所有句子都以句号结尾,否则需要额外处理stack中剩余的元素
if (!stack.isEmpty()) {
reversedSentences.append(createSentence(stack));
}
// 移除末尾可能多余的空格和句号,或者根据需求进行裁剪
if (reversedSentences.length() > 0 && reversedSentences.toString().endsWith(". ")) {
reversedSentences.setLength(reversedSentences.length() - 2); // 移除最后的". "
}
return reversedSentences.toString();
}
// ... createSentence 方法将在下面介绍
}这个方法负责从栈中弹出词语,并使用StringJoiner将它们以正确的逆序组合成一个完整的句子。
步骤:
// 承接上面的 SentenceReverser 类
public class SentenceReverser {
// ... reverseSentences 方法
public static String createSentence(Stack<String> stack) {
StringJoiner sentence = new StringJoiner(" "); // 使用空格作为词语分隔符
while (!stack.isEmpty()) {
sentence.add(stack.pop()); // 从栈中弹出词语并添加到StringJoiner
}
return sentence.toString();
}
public static void main(String[] args) {
String text = "Cats are cool. Dogs are cool. So are turtles.";
// 使用空格作为分隔符将文本拆分成词语数组
String[] words = text.split(" ");
System.out.println("原始文本: " + text);
System.out.println("逆序后文本: " + reverseSentences(words));
}
}import java.util.Stack;
import java.util.StringJoiner;
public class SentenceReverser {
/**
* 对包含多个句子的文本进行词语逆序处理。
* 每个句子独立逆序,并保留句子的原始结构。
*
* @param wordArray 包含所有词语的字符串数组,词语之间以空格分隔。
* @return 逆序处理后的完整文本。
*/
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);
}
}
// 考虑如果最后一个句子不以句号结尾,栈中可能还有剩余词语
// 本例假设所有句子都以句号结尾,若有其他情况,需在此处补充处理逻辑
if (!stack.isEmpty()) {
// 如果在循环结束后栈中仍有词语,说明最后一个句子没有以句号结束
// 或者文本的末尾是未处理的词语。将其作为最后一个句子处理。
reversedSentences.append(createSentence(stack));
}
// 移除末尾可能多余的空格和句号,使输出更整洁
// 例如,如果原始文本是 "A. B.",处理后可能是 "A. B. ",需要移除末尾的". "
if (reversedSentences.length() > 0 && reversedSentences.toString().endsWith(". ")) {
reversedSentences.setLength(reversedSentences.length() - 2); // 移除最后的". "
}
return reversedSentences.toString();
}
/**
* 从栈中弹出所有词语,并使用空格将它们连接成一个逆序的句子。
*
* @param stack 包含一个句子所有词语的栈。
* @return 逆序后的句子字符串。
*/
public static String createSentence(Stack<String> stack) {
StringJoiner sentence = new StringJoiner(" "); // 使用空格作为词语之间的分隔符
while (!stack.isEmpty()) {
sentence.add(stack.pop()); // 从栈顶弹出词语并添加到StringJoiner中
}
return sentence.toString();
}
public static void main(String[] args) {
String text = "Cats are cool. Dogs are cool. So are turtles.";
// 将文本按空格拆分为词语数组。注意,句号会与最后一个词语连在一起。
String[] words = text.split(" ");
System.out.println("原始文本: " + text);
System.out.println("逆序后文本: " + reverseSentences(words));
// 预期输出: cool are Cats. cool are Dogs. turtles are So.
}
}原始文本: Cats are cool. Dogs are cool. So are turtles. 逆序后文本: cool are Cats. cool are Dogs. turtles are So.
通过结合Stack的LIFO特性、StringBuilder的高效拼接以及StringJoiner的便捷连接,我们可以有效地实现对多句文本中每个句子词语的独立逆序。这种方法结构清晰、逻辑严谨,为处理类似文本操作提供了可行的解决方案。理解并掌握这些Java核心工具的使用,对于编写高效且易于维护的文本处理程序至关重要。
以上就是使用Java Stack和StringBuilder实现多句文本词语逆序的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号