In this short guide, you will learn how to capitalize the first letter of each word in a string using Java. We have already learned to capitalize the first letter of a string in Java but doing so for each word is a bit tricky.

Using Java 8 Streams

The easiest way to capitalize the first character of each word of a string is by using Java 8 Stream API:

String str = "welcome to java";

// uppercase first letter of each word
String output = Arrays.stream(str.split("\\s+"))
        .map(t -> t.substring(0, 1).toUpperCase() + t.substring(1))
        .collect(Collectors.joining(" "));

// print the string
System.out.println(output);
// Welcome To Java

In the above example, we first split the string into an array using the split() method. The array is passed to Arrays.stream() as a parameter that turns it into a Stream object. Afterward, we use the map() method from streams to capitalize each word before converting it back to a string using collect() method.

If the string is empty or null, the above code will throw an exception. Let us write a function capitalizeAll() that makes sure there is no exception while transforming string:

public static String capitalizeAll(String str) {
    if (str == null || str.isEmpty()) {
        return str;
    }

    return Arrays.stream(str.split("\\s+"))
            .map(t -> t.substring(0, 1).toUpperCase() + t.substring(1))
            .collect(Collectors.joining(" "));
}

Here are few examples that use the above function to capitalize the first character of each word:

System.out.println(capitalizeAll("welcome to java")); // Welcome To Java
System.out.println(capitalizeAll("this is awesome")); // This Is Awesome
System.out.println(capitalizeAll("mcdonald in lahore")); // Mcdonald In Lahore
System.out.println(capitalizeAll(null)); // null

The above solution only changes the first letter of each word while all other characters remain the same.

Sometimes, you want to make sure that only and only the first character of a word is capitalized. Let us write another function capitalizeFully() for this:

public static String capitalizeFully(String str) {
    if (str == null || str.isEmpty()) {
        return str;
    }

    return Arrays.stream(str.split("\\s+"))
            .map(t -> t.substring(0, 1).toUpperCase() + t.substring(1).toLowerCase())
            .collect(Collectors.joining(" "));
}

The only difference between capitalizeAll() and capitalizeFully() is that the latter function explicitly changes the remaining part of the word to lowercase:

System.out.println(capitalizeFully("i aM aTTa")); // I Am Atta
System.out.println(capitalizeFully("fOo bAr")); // Foo Bar

Using String.replaceAll() Method

If you are using Java 9 or higher, it is possible to use a regular expression with String.replaceAll() method to capitalize the first letter of each word in a string. The String.replaceAll() method replaces each substring of this string that matches the given regular expression with the given replacement. Here is an example:

public static String capitalizeAll(String str) {
    if (str == null || str.isEmpty()) {
        return str;
    }

    return Pattern.compile("\\b(.)(.*?)\\b")
            .matcher(str)
            .replaceAll(match -> match.group(1).toUpperCase() + match.group(2));
}

Let us have some examples:

System.out.println(capitalizeAll("12 ways to learn java")); // 12 Ways To Learn Java
System.out.println(capitalizeAll("i am atta")); // I Am Atta
System.out.println(capitalizeAll(null)); // null

Using Apache Commons Text

The Apache Commons Text library is yet another option available to convert the first character of each word in a string to uppercase. Add the following dependency to your build.gradle file:

implementation 'org.apache.commons:commons-text:1.8'

For Maven project, you need to add the following to your pom.xml file:

<dependency>
   <groupId>org.apache.commons</groupId>
   <artifactId>commons-text</artifactId>
   <version>1.8</version>
</dependency>

Now you can use the capitalize() method from WordUtils class to capitalize each word in a string:

System.out.println(WordUtils.capitalize("love is everywhere")); // Love Is Everywhere
System.out.println(WordUtils.capitalize("sky, sky, blue sky!")); // Sky, Sky, Blue Sky!
System.out.println(WordUtils.capitalize(null)); // null

The good thing about WordUtils methods is that they handle the exceptions gracefully. There won't be any exception even if the input is null.

The WordUtils class also provides capitalizeFully() method that capitalizes the first character and turns the remaining characters of each word to lowercase:

System.out.println(WordUtils.capitalizeFully("fOO bAR")); // Foo Bar
System.out.println(WordUtils.capitalizeFully("sKy is BLUE!")); // Sky Is Blue!

✌️ Like this article? Follow @attacomsian on Twitter. You can also follow me on LinkedIn and DEV. Buy me a coffee (cost $3)

Need help to start a new Spring Boot or MEAN stack project? I am available for contract work. Hire me to accomplish your business goals with engineering and design. Let’s talk about your project: hi@attacomsian.com.