Reversed Words in Java


The challenge

Complete the solution so that it reverses all of the words within the string passed in.

Example:

ReverseWords.reverseWords("The greatest victory is that which requires no battle");
// should return "battle no requires which that is victory greatest The"

The solution in Java code

Option 1 (using StringBuilder):

public class ReverseWords{

 public static String reverseWords(String str){
     String[] words = str.split(" ");
   
     StringBuilder sb = new StringBuilder();
     
     for (int i=words.length-1; i>=0; i--) {
         sb.append(words[i]).append(" ");
     }
     
     return sb.toString().trim();
 }

}

Option 2 (using Arrays):

import java.util.*;

public class ReverseWords{

 public static String reverseWords(String str){
     List Words = Arrays.asList(str.split(" "));
     Collections.reverse(Words);
     return String.join(" ", Words);
 }

}

Option 3 (using streams):

import java.util.Arrays;

public class ReverseWords{

 public static String reverseWords(String str){
     return Arrays.stream(str.split(" ")).reduce((x, y) -> y+" "+x).get();
 }

}

Test cases to validate our solution

import org.junit.Test;
import static org.junit.Assert.assertEquals;
import org.junit.runners.JUnit4;

public class SolutionTest {
    @Test
    public void testSomething() {
         assertEquals("eating like I", ReverseWords.reverseWords("I like eating"));
         assertEquals("flying like I", ReverseWords.reverseWords("I like flying"));
         assertEquals("nice is world The", ReverseWords.reverseWords("The world is nice"));
         assertEquals("nice so not is world The", ReverseWords.reverseWords("The world is not so nice"));
         assertEquals("beatiful is Life", ReverseWords.reverseWords("Life is beatiful"));
         assertEquals("won! we hello Hello", ReverseWords.reverseWords("Hello hello we won!"));
    }
}