How to upper case every first letter of word in a string?

JavaString

Java Problem Overview


I have a string: "hello good old world" and i want to upper case every first letter of every word, not the whole string with .toUpperCase(). Is there an existing java helper which does the job?

Java Solutions


Solution 1 - Java

Have a look at ACL WordUtils.

WordUtils.capitalize("your string") == "Your String"

Solution 2 - Java

Here is the code

	String source = "hello good old world";
	StringBuffer res = new StringBuffer();

	String[] strArr = source.split(" ");
	for (String str : strArr) {
		char[] stringArray = str.trim().toCharArray();
		stringArray[0] = Character.toUpperCase(stringArray[0]);
		str = new String(stringArray);

		res.append(str).append(" ");
	}

	System.out.print("Result: " + res.toString().trim());

Solution 3 - Java

sString = sString.toLowerCase();
sString = Character.toString(sString.charAt(0)).toUpperCase()+sString.substring(1);

Solution 4 - Java

i dont know if there is a function but this would do the job in case there is no exsiting one:

String s = "here are a bunch of words";

final StringBuilder result = new StringBuilder(s.length());
String[] words = s.split("\\s");
for(int i=0,l=words.length;i<l;++i) {
  if(i>0) result.append(" ");      
  result.append(Character.toUpperCase(words[i].charAt(0)))
        .append(words[i].substring(1));
  
}

Solution 5 - Java

import org.apache.commons.lang.WordUtils;
 
public class CapitalizeFirstLetterInString {
    public static void main(String[] args) {
        // only the first letter of each word is capitalized.
        String wordStr = WordUtils.capitalize("this is first WORD capital test.");
        //Capitalize method capitalizes only first character of a String
        System.out.println("wordStr= " + wordStr);
 
        wordStr = WordUtils.capitalizeFully("this is first WORD capital test.");
        // This method capitalizes first character of a String and make rest of the characters lowercase
        System.out.println("wordStr = " + wordStr );
    }
}

Output :

This Is First WORD Capital Test.

This Is First Word Capital Test.

Solution 6 - Java

Here's a very simple, compact solution. str contains the variable of whatever you want to do the upper case on.

StringBuilder b = new StringBuilder(str);
int i = 0;
do {
  b.replace(i, i + 1, b.substring(i,i + 1).toUpperCase());
  i =  b.indexOf(" ", i) + 1;
} while (i > 0 && i < b.length());

System.out.println(b.toString());

It's best to work with StringBuilder because String is immutable and it's inefficient to generate new strings for each word.

Solution 7 - Java

Trying to be more memory efficient than splitting the string into multiple strings, and using the strategy shown by Darshana Sri Lanka. Also, handles all white space between words, not just the " " character.

public static String UppercaseFirstLetters(String str) 
{
    boolean prevWasWhiteSp = true;
    char[] chars = str.toCharArray();
    for (int i = 0; i < chars.length; i++) {
        if (Character.isLetter(chars[i])) {
            if (prevWasWhiteSp) {
                chars[i] = Character.toUpperCase(chars[i]);    
            }
            prevWasWhiteSp = false;
        } else {
            prevWasWhiteSp = Character.isWhitespace(chars[i]);
        }
    }
    return new String(chars);
}

Solution 8 - Java

    String s = "java is an object oriented programming language.";      
    final StringBuilder result = new StringBuilder(s.length());    
    String words[] = s.split("\\ "); // space found then split it  
    for (int i = 0; i < words.length; i++) 
         {
	if (i > 0){
	result.append(" ");
    }   
	result.append(Character.toUpperCase(words[i].charAt(0))).append(
				words[i].substring(1));   
    }  
	System.out.println(result);  

Output: Java Is An Object Oriented Programming Language.

Solution 9 - Java

Also you can take a look into StringUtils library. It has a bunch of cool stuff.

Solution 10 - Java

My code after reading a few above answers.

/**
 * Returns the given underscored_word_group as a Human Readable Word Group.
 * (Underscores are replaced by spaces and capitalized following words.)
 * 
 * @param pWord
 *            String to be made more readable
 * @return Human-readable string
 */
public static String humanize2(String pWord)
{
	StringBuilder sb = new StringBuilder();
	String[] words = pWord.replaceAll("_", " ").split("\\s");
	for (int i = 0; i < words.length; i++)
	{
		if (i > 0)
			sb.append(" ");
		if (words[i].length() > 0)
		{
			sb.append(Character.toUpperCase(words[i].charAt(0)));
			if (words[i].length() > 1)
			{
				sb.append(words[i].substring(1));
			}
		}
	}
	return sb.toString();
}

Solution 11 - Java

import java.util.Scanner;
public class CapitolizeOneString {

    public static void main(String[] args)
    {
        Scanner  scan = new Scanner(System.in);
        System.out.print(" Please enter Your word      = ");
        String str=scan.nextLine();
         
        printCapitalized( str );
    }  // end main()

    static void printCapitalized( String str ) {
        // Print a copy of str to standard output, with the
        // first letter of each word in upper case.
        char ch;       // One of the characters in str.
        char prevCh;   // The character that comes before ch in the string.
        int i;         // A position in str, from 0 to str.length()-1.
        prevCh = '.';  // Prime the loop with any non-letter character.
        for ( i = 0;  i < str.length();  i++ ) {
            ch = str.charAt(i);
            if ( Character.isLetter(ch)  &&  ! Character.isLetter(prevCh) )
                System.out.print( Character.toUpperCase(ch) );
            else
                System.out.print( ch );
            prevCh = ch;  // prevCh for next iteration is ch.
        }
        System.out.println();
    }   
}  // end class

Solution 12 - Java

public class WordChangeInCapital{
  
   public static void main(String[]  args)
   {
      String s="this is string example";
      System.out.println(s);
      //this is input data.
      //this example for a string where each word must be started in capital letter
      StringBuffer sb=new StringBuffer(s);
      int i=0;
      do{
        b.replace(i,i+1,sb.substring(i,i+1).toUpperCase());
        i=b.indexOf(" ",i)+1;
      } while(i>0 && i<sb.length());
      System.out.println(sb.length());
   }

}

Solution 13 - Java

package com.raj.samplestring;

/**
 * @author gnagara
 */
public class SampleString {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
       String[] stringArray;
       String givenString = "ramu is Arr Good boy";
       
       stringArray = givenString.split(" ");
       
       
       for(int i=0; i<stringArray.length;i++){
    	   if(!Character.isUpperCase(stringArray[i].charAt(0))){
    		   Character c = stringArray[i].charAt(0);
    		   Character change = Character.toUpperCase(c);

    		   StringBuffer ss = new StringBuffer(stringArray[i]);
    		   ss.insert(0, change);
    		   ss.deleteCharAt(1);
    		   stringArray[i]= ss.toString();
    	   }
       }
       for(String e:stringArray){
	       System.out.println(e);
      }
	}
}

Solution 14 - Java

Here is an easy solution:

public class CapitalFirstLetters {

 public static void main(String[] args) {
    String word = "it's java, baby!";
    String[] wordSplit;
    String wordCapital = "";
    wordSplit = word.split(" ");
    for (int i = 0; i < wordSplit.length; i++) {
        wordCapital = wordSplit[i].substring(0, 1).toUpperCase() + wordSplit[i].substring(1) + " ";
    }
    System.out.println(wordCapital);
 }}

Solution 15 - Java

public String UpperCaseWords(String line)
{
    line = line.trim().toLowerCase();
    String data[] = line.split("\\s");
    line = "";
    for(int i =0;i< data.length;i++)
    {
        if(data[i].length()>1)
            line = line + data[i].substring(0,1).toUpperCase()+data[i].substring(1)+" ";
        else
            line = line + data[i].toUpperCase();
    }
    return line.trim();
}

Solution 16 - Java

So much simpler with regexes:

Pattern spaces=Pattern.compile("\\s+[a-z]");       
Matcher m=spaces.matcher(word);    
StringBuilder capitalWordBuilder=new StringBuilder(word.substring(0,1).toUpperCase());
int prevStart=1;
        while(m.find()) {
                capitalWordBuilder.append(word.substring(prevStart,m.end()-1));
                capitalWordBuilder.append(word.substring(m.end()-1,m.end()).toUpperCase());
                prevStart=m.end();
        }   
        capitalWordBuilder.append(word.substring(prevStart,word.length()));

Output for input: "this sentence Has Weird caps"

This Sentence Has Weird Caps

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionChrisView Question on Stackoverflow
Solution 1 - JavaakarnokdView Answer on Stackoverflow
Solution 2 - JavandomanyoView Answer on Stackoverflow
Solution 3 - JavaGustavo SamicoView Answer on Stackoverflow
Solution 4 - JavatommyLView Answer on Stackoverflow
Solution 5 - Javaroy mathewView Answer on Stackoverflow
Solution 6 - JavabinkdmView Answer on Stackoverflow
Solution 7 - Javauser877139View Answer on Stackoverflow
Solution 8 - JavaRupendra SharmaView Answer on Stackoverflow
Solution 9 - JavaamoranView Answer on Stackoverflow
Solution 10 - JavaReactgularView Answer on Stackoverflow
Solution 11 - JavaDarshana Sri LankaView Answer on Stackoverflow
Solution 12 - JavaNitu KumariView Answer on Stackoverflow
Solution 13 - JavanagarajuView Answer on Stackoverflow
Solution 14 - JavaGena OlegovichView Answer on Stackoverflow
Solution 15 - JavaArunView Answer on Stackoverflow
Solution 16 - Javauser439407View Answer on Stackoverflow