Jonathan Wilson
Jonathan Wilson

Reputation: 23

How to reverse a string that has already been reversed?

I made a program that lets a user enter in a word or a phrase or a sentence and reverse it and display the result.

My issue is that when I run it it does reverse it but it reverses the words when all I want to do is keep the words as they were inputted and just reverse them.

Here is what I have currently

//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

Upvotes: 0

Views: 114

Answers (6)

alainlompo
alainlompo

Reputation: 4434

I have refactored your code a little bit to solve your issue. First I put your reverse logic in a separate method

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;

}

Second I splitted your string into words (assuming the words are separated by simple spaces)

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

Here is an execution example:

reverse

Upvotes: 0

Breeze
Breeze

Reputation: 2058

Do you want to reverse the word order? In this case you'll have to split the input string at " ".

To do this, your else-block should be

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);

Upvotes: 1

Karthik
Karthik

Reputation: 1811

You can split the input string into separate array of words and then reverse each word in the array separately.

Refer this for code.

Upvotes: 0

Vinny
Vinny

Reputation: 797

I see 2 ways of dealing with this quickly if not too elegantly

  1. easiest thing to do would be to create a 3rd variable called something like String originalWords that gets appended to from stdin in the loop.

  2. Reuse the existing 'original' String to do the same as above and then loop it in reverse in a second loop.

Upvotes: 0

John Kugelman
John Kugelman

Reputation: 361595

The key to solving problems is learning how to break them down into smaller pieces that are easier to solve. This is a good problem solving technique and is at the heart of programming.

You know how to reverse the letters in a sentence. You want to reverse the letters in each word, but leave the words in their original order. Or, to say it another way, you want to:

  1. Split the sentence into separate words.
  2. Reverse each word one by one.
  3. Combine the words back together into a sentence.

Hopefully each of these steps is more manageable. If not, think about how you can break them into even smaller steps. For instance, for #2 maybe you need a loop and then something inside that loop.

Upvotes: 2

John3136
John3136

Reputation: 29266

Clearly a homework question, so I'll give you a shove in the right direction, but I won't give the full answer. You need to reverse one word at a time and not the whole string.

You need something that implements this pseudo code:

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
}

If you read the docs, you may find reverse and breakIntoWords are already there for you, so you just need to call the right methods.

Upvotes: 2

Related Questions