How to capitalize the first character of each word in a string

后端 未结 30 1417
情深已故
情深已故 2020-11-22 02:08

Is there a function built into Java that capitalizes the first character of each word in a String, and does not affect the others?

Examples:

  • jon
相关标签:
30条回答
  • 2020-11-22 02:41

    I'm using the following function. I think it is faster in performance.

    public static String capitalize(String text){
        String c = (text != null)? text.trim() : "";
        String[] words = c.split(" ");
        String result = "";
        for(String w : words){
            result += (w.length() > 1? w.substring(0, 1).toUpperCase(Locale.US) + w.substring(1, w.length()).toLowerCase(Locale.US) : w) + " ";
        }
        return result.trim();
    }
    
    0 讨论(0)
  • 2020-11-22 02:41
      package com.test;
    
     /**
       * @author Prasanth Pillai
       * @date 01-Feb-2012
       * @description : Below is the test class details
       * 
       * inputs a String from a user. Expect the String to contain spaces and    alphanumeric     characters only.
       * capitalizes all first letters of the words in the given String.
       * preserves all other characters (including spaces) in the String.
       * displays the result to the user.
       * 
       * Approach : I have followed a simple approach. However there are many string    utilities available 
       * for the same purpose. Example : WordUtils.capitalize(str) (from apache commons-lang)
       *
       */
      import java.io.BufferedReader;
      import java.io.IOException;
      import java.io.InputStreamReader;
    
      public class Test {
    
    public static void main(String[] args) throws IOException{
        System.out.println("Input String :\n");
        InputStreamReader converter = new InputStreamReader(System.in);
        BufferedReader in = new BufferedReader(converter);
        String inputString = in.readLine();
        int length = inputString.length();
        StringBuffer newStr = new StringBuffer(0);
        int i = 0;
        int k = 0;
        /* This is a simple approach
         * step 1: scan through the input string
         * step 2: capitalize the first letter of each word in string
         * The integer k, is used as a value to determine whether the 
         * letter is the first letter in each word in the string.
         */
    
        while( i < length){
            if (Character.isLetter(inputString.charAt(i))){
                if ( k == 0){
                newStr = newStr.append(Character.toUpperCase(inputString.charAt(i)));
                k = 2;
                }//this else loop is to avoid repeatation of the first letter in output string 
                else {
                newStr = newStr.append(inputString.charAt(i));
                }
            } // for the letters which are not first letter, simply append to the output string. 
            else {
                newStr = newStr.append(inputString.charAt(i));
                k=0;
            }
            i+=1;           
        }
        System.out.println("new String ->"+newStr);
        }
    }
    
    0 讨论(0)
  • 2020-11-22 02:44

    This might be useful if you need to capitalize titles. It capitalizes each substring delimited by " ", except for specified strings such as "a" or "the". I haven't ran it yet because it's late, should be fine though. Uses Apache Commons StringUtils.join() at one point. You can substitute it with a simple loop if you wish.

    private static String capitalize(String string) {
        if (string == null) return null;
        String[] wordArray = string.split(" "); // Split string to analyze word by word.
        int i = 0;
    lowercase:
        for (String word : wordArray) {
            if (word != wordArray[0]) { // First word always in capital
                String [] lowercaseWords = {"a", "an", "as", "and", "although", "at", "because", "but", "by", "for", "in", "nor", "of", "on", "or", "so", "the", "to", "up", "yet"};
                for (String word2 : lowercaseWords) {
                    if (word.equals(word2)) {
                        wordArray[i] = word;
                        i++;
                        continue lowercase;
                    }
                }
            }
            char[] characterArray = word.toCharArray();
            characterArray[0] = Character.toTitleCase(characterArray[0]);
            wordArray[i] = new String(characterArray);
            i++;
        }
        return StringUtils.join(wordArray, " "); // Re-join string
    }
    
    0 讨论(0)
  • 2020-11-22 02:45
    public static String toTitleCase(String word){
        return Character.toUpperCase(word.charAt(0)) + word.substring(1);
    }
    
    public static void main(String[] args){
        String phrase = "this is to be title cased";
        String[] splitPhrase = phrase.split(" ");
        String result = "";
    
        for(String word: splitPhrase){
            result += toTitleCase(word) + " ";
        }
        System.out.println(result.trim());
    }
    
    0 讨论(0)
  • 2020-11-22 02:45

    If you prefer Guava...

    String myString = ...;
    
    String capWords = Joiner.on(' ').join(Iterables.transform(Splitter.on(' ').omitEmptyStrings().split(myString), new Function<String, String>() {
        public String apply(String input) {
            return Character.toUpperCase(input.charAt(0)) + input.substring(1);
        }
    }));
    
    0 讨论(0)
  • 2020-11-22 02:47

    Here is a simple function

    public static String capEachWord(String source){
        String result = "";
        String[] splitString = source.split(" ");
        for(String target : splitString){
            result += Character.toUpperCase(target.charAt(0))
                    + target.substring(1) + " ";
        }
        return result.trim();
    }
    
    0 讨论(0)
提交回复
热议问题