Java使用堆栈来反转句子中的单词

时间:2014-02-12 01:29:06

标签: java string stack push pop

我应该编写一个代码来读取用户的句子并向后打印句子中的单词字符。它应该包含一个辅助方法,该方法将String作为参数并返回一个字符颠倒的新String。单词是相反的,例如句子“嗨狗猫”。将打印“iH god tac”。我可以使整个句子反转,但我无法弄清楚如何扭转单个单词。谢谢!另外,我知道如何在找到它后返回String,但我无法获得正确的字符串

import java.util.Scanner;
import java.util.Stack;

public class ReverseStack 
{
    public static void main(String[] args)
    {
        String sentence;

        System.out.println("Enter a sentence: ");
        Scanner scan = new Scanner(System.in);

        sentence = scan.nextLine();

        String k = PrintStack(sentence);
    }

    private static String PrintStack(String sentence)
    {
        String reverse;
        String stringReversed = "";

        Stack<String> stack= new Stack<String>();

        sentence.split(" ");

        for(int i=0;i<sentence.length(); i++)
        {
            stack.push(sentence.substring(i, i+1));
        }

        while(!stack.isEmpty())
        {
            stringReversed += stack.pop();
        }

        System.out.println("Reverse is: " + stringReversed);


        return reverse;
    }

}

3 个答案:

答案 0 :(得分:2)

我会输入一个阐述,这样你仍然可以获得编写代码的经验,而不是仅仅给我代码。

首先创建一个Stack Character个。然后使用String中的每个字符添加到Stack,从第一个char开始,然后是第二个,依此类推。现在,请清除String或创建新的String以存储反转的字词。最后,将Stack中的每个字符添加到String。这将首先关闭最后一个字符,然后将第二个字符拉到最后,依此类推。

注意:我认为你必须使用Character包装类,而不是原始char;尽管如此我可能不正确。

如果您不熟悉Stack的工作原理,可以使用以下方法来展示它:http://www.cise.ufl.edu/~sahni/dsaaj/JavaVersions/Stacks/AbstractStack/AbstractStack.htm

答案 1 :(得分:0)

更改:

Stack<String> stack = new Stack<String>(); 

Stack<Character> stack = new Stack<Character>();

并根据需要重构您的方法代码;即。

What is the easiest/best/most correct way to iterate through the characters of a string in Java?

答案 2 :(得分:0)

我用不同类型的堆栈做到了,但我怀疑这可能会有所帮助

private static String reverseWord(String in) {
  if (in.length() < 2) {
    return in;
  }
  return reverseWord(in.substring(1)) + in.substring(0, 1);
}

private static String reverseSentence(String in) {
  StringBuilder sb = new StringBuilder();
  StringTokenizer st = new StringTokenizer(in);
  while (st.hasMoreTokens()) {
    if (sb.length() > 0)
      sb.append(' ');
    sb.append(reverseWord(st.nextToken()));
  }
  return sb.toString();
}

public static void main(String[] args) {
  String sentence = "Hi dog cat";
  String expectedOutput = "iH god tac";
  System.out.println(expectedOutput
      .equals(reverseSentence(sentence)));
}

输出

true