簡體   English   中英

如何反轉已經反轉的字符串?

[英]How to reverse a string that has already been reversed?

我制作了一個程序,允許用戶輸入單詞或短語或句子,然后將其取反並顯示結果。

我的問題是,當我運行它時,它的確會反轉它,但是當我想要做的就是將輸入的詞保持原樣並將其反轉時,它會將詞反轉。

這是我目前所擁有的

//import statements
import java.util.*;     //for scanner class


// class beginning

class  WordReverser {
public static void main(String[] args ) {

    //Declare variables area
    String original, reverse = "";
    Scanner in = new Scanner(System.in);
    boolean blankString = false;
    public StringBuilder reverse();

    // beginning message to user to explain the program
    System.out.println("Welcome to my reverse word program!");
    System.out.println("Please enter in a word or a phrase and see it reversed: ");

    //main code and calculations to do
    while (!blankString){
        System.out.println("Enter a string to reverse");//Collect inputs from user.
        original = in.nextLine();
        if (original.equals(""))
        {
            blankString = true ;
        }
        else {
            int length = original.length();

            for ( int i = length - 1 ; i >= 0 ; i-- )
                reverse = reverse + original.charAt(i);

            System.out.println("Reverse of entered string is: "+reverse);//Output results here
        }
    }

    //End program message
    System.out.println();
    System.out.println("Hope you enjoyed using this program!");
}// end main method


 }// end class

顯然,這是一個家庭作業問題,因此,我會向您推薦正確的方法,但我不會給出完整的答案。 您需要一次反向一個單詞,而不是整個字符串。

您需要一些實現此偽代碼的東西:

original = getStringFromUser();
words[] = breakIntoWords(original);
foreach word in words {
    reversed = reverse(word);
    print reversed;
}

reverse(string word)
{
    return reversed version of the input
}

breakIntoWords(sting sentence)
{
    return array with each word as a sep.element
}

如果您閱讀這些文檔,可能會發現reversebreakIntoWords已經存在,因此您只需要調用正確的方法即可。

解決問題的關鍵是學習如何將問題分解為更容易解決的小問題。 這是一種很好的解決問題的技術,並且是編程的核心。

您知道如何顛倒句子中的字母。 您想顛倒​​每個單詞中的字母,但保留單詞的原始順序。 或者,換句話說,您想要:

  1. 將句子拆分成單獨的單詞。
  2. 逐個顛倒每個單詞。
  3. 將單詞重新組合成一個句子。

希望每個步驟都更易於管理。 如果沒有,請考慮如何將它們分解為更小的步驟。 例如,對於#2,您可能需要一個循環,然后在該循​​環內進行操作。

您要顛倒單詞順序嗎? 在這種情況下,您必須在“”處分割輸入字符串。

為此,您的else-block應該是

String[] words = original.split(" ");
for(int i = words.length-1; i>=0; i--)
    reverse += words[i] + " ";
System.out.println("Reverse of entered string is: "+reverse);

如果不是太優雅,我會看到兩種快速處理此問題的方法

  1. 最簡單的方法是創建一個名為String OriginalWords之類的第3個變量,該變量將從循環中的stdin附加到該變量。

  2. 重用現有的“原始”字符串以執行與上述相同的操作,然后在第二個循環中反向循環。

您可以將輸入字符串拆分為單獨的單詞數組,然后分別反轉該數組中的每個單詞。

請參考此代碼。

我對您的代碼進行了一些重構以解決您的問題。 首先,我將反向邏輯放在單獨的方法中

public static String reverse(String strToReverse) {

        String original = strToReverse, reverse = "";

        boolean blankString = false;

        if (original.equals(""))
        {
                blankString = true ;
         }
         else {
            int length = original.length();

            for ( int i = length - 1 ; i >= 0 ; i-- )
                 reverse = reverse + original.charAt(i);
         }

        return reverse;

}

其次,我將您的字符串拆分為單詞(假設單詞之間用簡單的空格隔開)

public static void main(String[] args ) {

    //Declare variables area
    String original, reverse = "";
    Scanner in = new Scanner(System.in);
    boolean blankString = false;
    //public StringBuilder reverse();

    // beginning message to user to explain the program
    System.out.println("Welcome to my reverse word program!");
    System.out.println("Please enter in a word or a phrase and see it reversed: ");

    //main code and calculations to do
    while (!blankString){
        System.out.println("Enter a string to reverse");//Collect inputs from user.
        original = in.nextLine();
        if (original.equals(""))
        {
            blankString = true ;
        }
        else {

            String[] words = original.split(" ");
            String[] reversedWords = new String[words.length];
            StringBuilder reverseBuilder = new StringBuilder();
            for (int index = 0; index < words.length; index++) {
                reversedWords[index] = reverse(words[index]);
                reverseBuilder.append(reversedWords[index] +  " ");
            }


            System.out.println("Reverse of entered string is: "+reverseBuilder.toString());//Output results here
        }
    }

    //End program message
    System.out.println();
    System.out.println("Hope you enjoyed using this program!");
}// end main method

這是一個執行示例:

相反

暫無
暫無

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

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