w3resource

Java String Exercises: Reverse words in a given string

Java String: Exercise-45 with Solution

Write a Java program to reverse words in a given string.

Pictorial Presentation:

Java String Exercises: Reverse words in a given string

Sample Solution-1:

Java Code:

import java.util.*;
public class Main {
 public static String WordsInReverse(String str1) {
  StringBuilder sb = new StringBuilder(str1);
  String StrRev = sb.reverse().toString();

  String[] words = StrRev.split(" ");
  StringBuilder reverse = new StringBuilder();
  for (String tmp: words) {
   sb = new StringBuilder(tmp);
   reverse.append(sb.reverse() + " ");
  }
  reverse.deleteCharAt(reverse.length() - 1);
  return reverse.toString();
 }

 public static void main(String[] args) {
  String str1 = "Reverse words in a given string";
  System.out.println("The given string is: " + str1);
  System.out.println("The new string after reversed the words: " + WordsInReverse(str1));
 }
}

Sample Output:

The given string is: Reverse words in a given string
The new string after reversed the words: string given a in words Reverse

Flowchart:

Flowchart: Java String Exercises - Reverse words in a given string

Visualize Java code execution (Python Tutor):


Sample Solution-2:

Main.java Code:

//MIT License: https://bit.ly/35gZLa3
import java.util.concurrent.TimeUnit;

public class Main {

    private static final String TEXT = "My high school, the Illinois Mathematics and Science Academy, "
            + "showed me that anything is possible and that you're never too young to think big. "
            + "At 15, I worked as a computer programmer at the Fermi National Accelerator Laboratory, "
            + "or Fermilab. After graduating, I attended Stanford for a degree in economics and "
            + "computer science.";

    public static void main(String[] args) {

        System.out.println("Input text: \n" + TEXT + "\n");
        
        System.out.println("Reverse words in String via StringBuilder:");
        long startTimeV1 = System.nanoTime();
        
        String reversedV1 = Strings.reverseWordsV1(TEXT);
        
        displayExecutionTime(System.nanoTime() - startTimeV1);
        System.out.println("Reversed: \n" + reversedV1);

        System.out.println();        
        System.out.println("Reverse words in String using Java 8 functional-style:");
        long startTimeV2 = System.nanoTime();
        
        String reversedV2 = Strings.reverseWordsV2(TEXT);
        
        displayExecutionTime(System.nanoTime() - startTimeV2);
        System.out.println("Reversed: \n" + reversedV2);
        
        System.out.println();
        System.out.println("Reverse String via StringBuilder:");
        long startTimeV3 = System.nanoTime();
        
        String reversedV3 = Strings.reverse(TEXT);
        
        displayExecutionTime(System.nanoTime() - startTimeV3);
        System.out.println("Reversed: \n" + reversedV3);       
    }

    private static void displayExecutionTime(long time) {
        System.out.println("Execution time: " + time + " ns" + " ("
                + TimeUnit.MILLISECONDS.convert(time, TimeUnit.NANOSECONDS) + " ms)");
    }

}

Strings.java Code:

//MIT License: https://bit.ly/35gZLa3
import java.util.regex.Pattern;
import java.util.stream.Collectors;

public final class Strings {

    private static final Pattern PATTERN = Pattern.compile(" +");
    private static final String WHITESPACE = " ";

    private Strings() {
        throw new AssertionError("Cannot be instantiated");
    }

    public static String reverseWordsV1(String str) {

        if (str == null || str.isEmpty()) {
            // or throw IllegalArgumentException
            return "";
        }

        String[] words = str.split(WHITESPACE);
        StringBuilder reversedString = new StringBuilder();

        for (String word : words) {

            StringBuilder reverseWord = new StringBuilder();

            for (int i = word.length() - 1; i >= 0; i--) {
                reverseWord.append(word.charAt(i));
            }

            reversedString.append(reverseWord).append(WHITESPACE);
        }

        return reversedString.toString();
    }

    public static String reverseWordsV2(String str) {

        // or throw IllegalArgumentException
        if (str == null || str.isEmpty()) {
            return "";
        }

        return PATTERN.splitAsStream(str)
                .map(w -> new StringBuilder(w).reverse())
                .collect(Collectors.joining(WHITESPACE));
    }

    public static String reverse(String str) {

        // or throw IllegalArgumentException
        if (str == null || str.isEmpty()) {
            return "";
        }

        return new StringBuilder(str).reverse().toString();
    }

}

Sample Output:

Input text: 
My high school, the Illinois Mathematics and Science Academy, showed me that anything is possible and that you're never too young to think big. At 15, I worked as a computer programmer at the Fermi National Accelerator Laboratory, or Fermilab. After graduating, I attended Stanford for a degree in economics and computer science.

Reverse words in String via StringBuilder:
Execution time: 2670238 ns (2 ms)
Reversed: 
yM hgih ,loohcs eht sionillI scitamehtaM dna ecneicS ,ymedacA dewohs em taht gnihtyna si elbissop dna taht er'uoy reven oot gnuoy ot kniht .gib tA ,51 I dekrow sa a retupmoc remmargorp ta eht imreF lanoitaN rotareleccA ,yrotarobaL ro .balimreF retfA ,gnitaudarg I dednetta drofnatS rof a eerged ni scimonoce dna retupmoc .ecneics 

Reverse words in String using Java 8 functional-style:
Execution time: 143280080 ns (143 ms)
Reversed: 
yM hgih ,loohcs eht sionillI scitamehtaM dna ecneicS ,ymedacA dewohs em taht gnihtyna si elbissop dna taht er'uoy reven oot gnuoy ot kniht .gib tA ,51 I dekrow sa a retupmoc remmargorp ta eht imreF lanoitaN rotareleccA ,yrotarobaL ro .balimreF retfA ,gnitaudarg I dednetta drofnatS rof a eerged ni scimonoce dna retupmoc .ecneics

Reverse String via StringBuilder:
Execution time: 91373 ns (0 ms)
Reversed: 
.ecneics retupmoc dna scimonoce ni eerged a rof drofnatS dednetta I ,gnitaudarg retfA .balimreF ro ,yrotarobaL rotareleccA lanoitaN imreF eht ta remmargorp retupmoc a sa dekrow I ,51 tA .gib kniht ot gnuoy oot reven er'uoy taht dna elbissop si gnihtyna taht em dewohs ,ymedacA ecneicS dna scitamehtaM sionillI eht ,loohcs hgih yM

Flowchart:

Flowchart: Java String Exercises - Reverse words in a given string
Flowchart: Java String Exercises - Reverse words in a given string

Java Code Editor:

Improve this sample solution and post your code through Disqus

Previous: Write a Java program to reverse a string using recursion.
Next: Write a Java program to reverse every word in a string using methods.

What is the difficulty level of this exercise?



Java: Tips of the Day

Array vs ArrayLists:

The main difference between these two is that an Array is of fixed size so once you have created an Array you cannot change it but the ArrayList is not of fixed size. You can create instances of ArrayLists without specifying its size. So if you create such instances of an ArrayList without specifying its size Java will create an instance of an ArrayList of default size.

Once an ArrayList is full it re-sizes itself. In fact, an ArrayList is internally supported by an array. So when an ArrayList is resized it will slow down its performance a bit as the contents of the old Array must be copied to a new Array.

At the same time, it's compulsory to specify the size of an Array directly or indirectly while creating it. And also Arrays can store both primitives and objects while ArrayLists only can store objects.

Ref: https://bit.ly/3o8L2KH