我正在尝试创建一个接受字符串作为输入的方法,并返回另一个字符串,该字符串使用Stacks反转输入中每个句子的顺序。例如,如果用户输入“hi there.i like red”。输出的字符串应该是“喜欢。像我一样红。”。我创建的以下程序只适用于一个句子。我怎样才能修改方法以识别句点,然后重新开始该方法?目前,如果我输入“hi there”,输出就是“hi hi”,这很好。但是,如果我输入“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() + " ");
}
}
}
答案 0 :(得分:0)
在分割空间的输入之前,按周期修剪它并在for循环中为你之前获得的每个句子/分裂部分运行方法内的逻辑。
在你的main方法中,而不是调用reverseSentence:
String[] sentences = sentence.trim().split(Pattern.quote("."));
for (String toReverse : sentences) {
System.out.print(reverseSentece(toReverse));
}
我知道这不完美,但我希望能够了解我的意思,因为我在手机上打字。
答案 1 :(得分:0)
使用字符串拆分方法。
可能String[] sentences = sentence.split ("\\.");
?
答案 2 :(得分:0)
有两种方法可以实现这一目标:
首先将字符串拆分为&#39;。&#39;,为您提供字符串中的句子列表。将你的逻辑应用于每个句子。输出以句号分隔的每个反向句子。
使用您当前的逻辑,但在将任何单词添加到堆叠之前,请检查单词的最后一个字符是否为句点。如果是,这意味着它是一个句子的结尾。弹出堆栈直到空并显示内容。 (这将显示倒转的句子,直到这里)继续下一个单词。
希望这有帮助!