[英]Java - reverse sentences using Stacks
我正在尝试创建一种方法,该方法接受一个字符串作为输入,并返回另一个字符串,该字符串使用Stacks颠倒输入中每个句子的顺序。 例如,如果用户输入“嗨,我喜欢红色”。 输出的字符串应为“ hi。red like i。”。 我创建的以下程序仅适用于一个句子。 我如何修改该方法以识别周期,然后重新开始该方法? 当前,如果我输入“ hi there”,则输出为“ there hi”,这很好。 但是,如果我输入“ hi。i like red。”,则输出为“ red。like i there.hi”。 如何修改reverseSentence方法以识别句点并重新开始下一个句子? 任何建议或提示将非常有帮助。
//Reverses the order of words inside of sentences.
import java.util.*;
import java.util.regex.*;
public class reverse {
//reverses the string using a stack
private static String reverseSentence(String inputString) {
String[] arrString = inputString.trim().split(Pattern.quote(" "));
Stack stack = new Stack();
for(String word : arrString)
{
stack.push(word);
}
StringBuilder builder = new StringBuilder();
while( !stack.isEmpty())
{
builder.append(stack.pop()).append(" ");
}
return builder.toString();
}
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
Stack<String> stack = new Stack<String>();
System.out.printf("Enter a sentence: ");
String sentence = scanner.nextLine();
if (sentence == null || sentence.length() == 0) {
System.out.println("Invalid...");
return;
}
String reverse = reverseSentence(sentence);
System.out.printf("Reversed string using stack is : %s", reverse);
while (!stack.isEmpty()) {
System.out.print(stack.pop() + " ");
}
}
}
在空格处分割输入之前,请按句点对其进行修剪,并针对您之前获得的每个句子/分割部分在for循环中在方法中运行逻辑。
在您的主要方法中,而不是调用reverseSentence:
String[] sentences = sentence.trim().split(Pattern.quote("."));
for (String toReverse : sentences) {
System.out.print(reverseSentece(toReverse));
}
我知道这并不完美,但是我希望对我的意思有所了解,因为我在手机上打字。
使用字符串拆分方法。 String[] sentences = sentence.split ("\\\\.");
也许?
我想到两种方法可以实现此目的:
首先用“。”分隔字符串,为您提供字符串中的句子列表。 将逻辑应用于每个句子。 输出每个反句,以句点分隔。
使用当前逻辑,但是在将任何单词添加到堆栈之前,请检查单词的最后一个字符是否为句点。 如果是,则表示这是句子的结尾。 弹出堆栈,直到清空并显示内容。 (这将显示反向句子,直到此处)继续下一个单词。
希望这可以帮助!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.