簡體   English   中英

(Java) 需要使用棧來反轉一個字符串語句

[英](Java) Need to reverse a string sentence using stack

給定一個完整的句子,是否可以在不反轉單詞本身的情況下反轉堆棧。 即最初的句子 - 瑪麗有一只小羊羔。 它的羊毛潔白如雪。 新句子——小羊羔有瑪麗。 雪白如羊毛。 基本上卡在循環部分。 出於某種原因,我讓它顯示單詞並在期間中斷,但對於我的生活,我似乎無法讓 push/pop args 做我希望他們做的事情。 我把所有的評論都寫下來了,因為當我從編碼中休息一下時,它可以幫助我整理我的想法,就像我現在正在做的那樣,然后在我的電腦上打斷我的頭。

public class ReverseTheStack 
{
    private static LinkedList<Object> list = new LinkedList<Object>();
    
    public static class Stack
    {
        public void push(Object obj)
        {
            list .addFirst(obj);
        }
        public Object pop()
        {
            return list.removeFirst();
        }
    }
    public static void main(String [] args)
    {
        //First hard code the sentence for testing
        String sentence = "Mary had a little lamb. Its fleece was white as snow.";
        //The scanner is created with the String obj inside it
        Scanner in = new Scanner(sentence);
        //Set the scanner's delimiter to a period and the space after: "\\. "
        in.useDelimiter(" ");
        
        //Create a stack
        Stack sentenceReversal = new Stack();
        while(in.hasNext())
        {
            sentenceReversal.push(in.next());
            if(in.toString().contains("\\."))
            {
                System.out.println(sentenceReversal.pop());
            }
        }
        
        //Close the scanner
        in.close();
    }
}

可以使用自 Java 1.0 以來存在的Stack實現(盡管即使提到的 Javadoc 頁面也建議使用Deque接口及其實現提供更豐富的 LIFO 操作集):

String str = "Mary had a little lamb. Its fleece was white as snow.";
Stack<String> stack = new Stack<>();
StringBuilder sb = new StringBuilder(); // build result string

// splitting text into sentences
for (String sentence : str.split("\\.\\s*")) {
    stack.clear();

    // splitting into words
    for (String word : sentence.split("\\s+")) { 
        stack.push(word.toLowerCase()); // fix letter case
    }

    boolean first = true;
    while (!stack.empty()) {
        String word = stack.pop();
        if (first) {
            // capitalize the first letter in the reversed sentence
            first = false;
            word = word.substring(0, 1).toUpperCase() + word.substring(1);
        }
        if (sb.length() > 0) {
            sb.append(' ');
        }
        sb.append(word);
    }
    sb.append('.');
}
System.out.println(sb);

輸出:

Lamb little a had mary. Snow as white was fleece its.

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM