【问题标题】:How to capitalize the first character of each word in a string如何将字符串中每个单词的第一个字符大写
【发布时间】:2010-12-25 22:51:49
【问题描述】:

Java 中是否有一个函数可以将字符串中每个单词的第一个字符大写,并且不影响其他字符?

例子:

  • jon skeet -> Jon Skeet
  • miles o'Brien -> Miles O'Brien(B 仍然是大写字母,这排除了 Title Case)
  • old mcdonald -> Old Mcdonald*

*(Old McDonald 也会被发现,但我不希望它那么聪明。)

快速查看Java String Documentation 只会发现toUpperCase()toLowerCase(),这当然不能提供所需的行为。自然地,谷歌搜索结果以这两个功能为主。这似乎是一个必须已经发明的轮子,所以问一下也无妨,这样我将来可以使用它。

【问题讨论】:

  • old mcdonald 怎么样?那应该变成Old McDonald吗?
  • 我不希望这个功能这么聪明。 (虽然如果你有一个,我会很高兴看到它。)将空格后的第一个字母向上,但忽略其余的。
  • 无论如何,您都无法找到能够正确处理姓名大写的算法......只要有一对姓名,其中任何一个对于给定的人都可能是正确的,像 MacDonald 和 Macdonald 一样,该函数无法知道哪个是正确的。最好做你所做的,尽管你仍然会得到一些错误的名字(比如冯诺依曼)。
  • 试试汉堡王...

标签: java string uppercase lowercase capitalization


【解决方案1】:

WordUtils.capitalize(str)(来自apache commons-text

(注意:如果您需要将"fOO BAr" 变为"Foo Bar",请改用capitalizeFully(..)

【讨论】:

  • 我认为您的意思是 WordUtils.capitalize(str)。有关详细信息,请参阅 API。
  • 保持我的理念,即始终对引用公共库的答案进行投票。
  • 要将非首字母改为小写,请使用 capitalizeFully(str)。
  • 这个解决方案真的正确吗?在我看来不是!如果要大写“LAMborghini”,则最后要“Lamborghini”。所以 WordUtils.capitalizeFully(str) 是解决方案。
  • 请注意,WordUtils 现在已弃用,它是 Apache Commons Text 库的一部分 - commons.apache.org/proper/commons-text
【解决方案2】:

如果您只担心第一个单词的首字母大写:

private String capitalize(final String line) {
   return Character.toUpperCase(line.charAt(0)) + line.substring(1);
}

【讨论】:

  • 这只会改变第一个单词的第一个字母
  • 确实,这是我的本意。
  • @nbolton - 但它明确地忽略了问题的意图,并且对于该示例中给出的案例都失败了 - 而且它对之前给出的答案几乎没有增加!
  • 这段代码不是崩溃安全的!想象line 为 null 或长度为
  • 仍然,返回 Character.toUpperCase(word.charAt(0)) + word.substring(1).toLowerCase()
【解决方案3】:

以下方法将所有字母转换为大写/小写,具体取决于它们在空格或其他特殊字符附近的位置。

public static String capitalizeString(String string) {
  char[] chars = string.toLowerCase().toCharArray();
  boolean found = false;
  for (int i = 0; i < chars.length; i++) {
    if (!found && Character.isLetter(chars[i])) {
      chars[i] = Character.toUpperCase(chars[i]);
      found = true;
    } else if (Character.isWhitespace(chars[i]) || chars[i]=='.' || chars[i]=='\'') { // You can add other chars here
      found = false;
    }
  }
  return String.valueOf(chars);
}

【讨论】:

  • 我会改进和简化循环条件:if(Character.isLetter(chars[i])) { if(!found) { chars[i] = Character.toUpperCase(chars[i]); } found = true; } else { found = false; }.
  • @bancer,在您的示例中,您无法控制哪些字符后面不跟大写字母。
  • @TrueSoft,我不明白你。为什么要控制大写字母后面跟什么字符?据我了解,前面的字符不是字母很重要,我的示例确保了这一点。只需用我的 if-else 块替换你的 if-else-if 块并运行测试。
  • @TrueSoft,为清楚起见,我将found 重命名为previousCharIsLetter
  • 我喜欢不使用公共库的答案,因为有时你不能使用它。
【解决方案4】:

试试这个非常简单的方法

example givenString="ram is good boy"

public static String toTitleCase(String givenString) {
    String[] arr = givenString.split(" ");
    StringBuffer sb = new StringBuffer();

    for (int i = 0; i < arr.length; i++) {
        sb.append(Character.toUpperCase(arr[i].charAt(0)))
            .append(arr[i].substring(1)).append(" ");
    }          
    return sb.toString().trim();
}  

输出将是:拉姆是个好孩子

【讨论】:

  • 这段代码导致我们的服务器崩溃:java.lang.StringIndexOutOfBoundsException: String index out of range: 0
  • @Chrizzz 所以不要提交你没有测试过的代码......如果你提供一个空字符串,它确实会崩溃。你的错,不是尼拉姆的。
  • 如果末尾有空格那么它会崩溃然后我先添加 trim() 并用空格分割字符串。它工作得很好
  • 如果有人正在寻找它的 Kotlin 版本,这里是:stackoverflow.com/a/55390188/1708390
【解决方案5】:
String toBeCapped = "i want this sentence capitalized";

String[] tokens = toBeCapped.split("\\s");
toBeCapped = "";

for(int i = 0; i < tokens.length; i++){
    char capLetter = Character.toUpperCase(tokens[i].charAt(0));
    toBeCapped +=  " " + capLetter + tokens[i].substring(1);
}
toBeCapped = toBeCapped.trim();

【讨论】:

  • 嗯,我认为for循环中的第二行应该是:toBeCapped += " " + capLetter + tokens[i].substring(1, tokens[i].length());
  • 但是这个解决方案会在开头添加一个空格。所以你可能需要做左修剪。
【解决方案6】:

我在 Java 8 中制作了一个更易读的 Java 8 解决方案。

public String firstLetterCapitalWithSingleSpace(final String words) {
    return Stream.of(words.trim().split("\\s"))
    .filter(word -> word.length() > 0)
    .map(word -> word.substring(0, 1).toUpperCase() + word.substring(1))
    .collect(Collectors.joining(" "));
}

可以在此处找到此解决方案的要点:https://gist.github.com/Hylke1982/166a792313c5e2df9d31

【讨论】:

    【解决方案7】:

    我写了一个小类来大写字符串中的所有单词。

    可选的multiple delimiters,每个都有其行为(大写之前、之后或两者,以处理O'Brian之类的情况);

    可选Locale

    不要中断Surrogate Pairs

    LIVE DEMO

    输出:

    ====================================
     SIMPLE USAGE
    ====================================
    Source: cApItAlIzE this string after WHITE SPACES
    Output: Capitalize This String After White Spaces
    
    ====================================
     SINGLE CUSTOM-DELIMITER USAGE
    ====================================
    Source: capitalize this string ONLY before'and''after'''APEX
    Output: Capitalize this string only beforE'AnD''AfteR'''Apex
    
    ====================================
     MULTIPLE CUSTOM-DELIMITER USAGE
    ====================================
    Source: capitalize this string AFTER SPACES, BEFORE'APEX, and #AFTER AND BEFORE# NUMBER SIGN (#)
    Output: Capitalize This String After Spaces, BeforE'apex, And #After And BeforE# Number Sign (#)
    
    ====================================
     SIMPLE USAGE WITH CUSTOM LOCALE
    ====================================
    Source: Uniforming the first and last vowels (different kind of 'i's) of the Turkish word D[İ]YARBAK[I]R (DİYARBAKIR) 
    Output: Uniforming The First And Last Vowels (different Kind Of 'i's) Of The Turkish Word D[i]yarbak[i]r (diyarbakir) 
    
    ====================================
     SIMPLE USAGE WITH A SURROGATE PAIR 
    ====================================
    Source: ab ?c de à
    Output: Ab ?c De À
    

    注意:第一个字母总是大写(如果您不想要,请编辑源代码)。

    请分享您的 cmets 并帮助我发现错误或改进代码...

    代码:

    import java.util.ArrayList;
    import java.util.Date;
    import java.util.List;
    import java.util.Locale;
    
    public class WordsCapitalizer {
    
        public static String capitalizeEveryWord(String source) {
            return capitalizeEveryWord(source,null,null);
        }
    
        public static String capitalizeEveryWord(String source, Locale locale) {
            return capitalizeEveryWord(source,null,locale);
        }
    
        public static String capitalizeEveryWord(String source, List<Delimiter> delimiters, Locale locale) {
            char[] chars; 
    
            if (delimiters == null || delimiters.size() == 0)
                delimiters = getDefaultDelimiters();                
    
            // If Locale specified, i18n toLowerCase is executed, to handle specific behaviors (eg. Turkish dotted and dotless 'i')
            if (locale!=null)
                chars = source.toLowerCase(locale).toCharArray();
            else 
                chars = source.toLowerCase().toCharArray();
    
            // First charachter ALWAYS capitalized, if it is a Letter.
            if (chars.length>0 && Character.isLetter(chars[0]) && !isSurrogate(chars[0])){
                chars[0] = Character.toUpperCase(chars[0]);
            }
    
            for (int i = 0; i < chars.length; i++) {
                if (!isSurrogate(chars[i]) && !Character.isLetter(chars[i])) {
                    // Current char is not a Letter; gonna check if it is a delimitrer.
                    for (Delimiter delimiter : delimiters){
                        if (delimiter.getDelimiter()==chars[i]){
                            // Delimiter found, applying rules...                       
                            if (delimiter.capitalizeBefore() && i>0 
                                && Character.isLetter(chars[i-1]) && !isSurrogate(chars[i-1]))
                            {   // previous character is a Letter and I have to capitalize it
                                chars[i-1] = Character.toUpperCase(chars[i-1]);
                            }
                            if (delimiter.capitalizeAfter() && i<chars.length-1 
                                && Character.isLetter(chars[i+1]) && !isSurrogate(chars[i+1]))
                            {   // next character is a Letter and I have to capitalize it
                                chars[i+1] = Character.toUpperCase(chars[i+1]);
                            }
                            break;
                        }
                    } 
                }
            }
            return String.valueOf(chars);
        }
    
    
        private static boolean isSurrogate(char chr){
            // Check if the current character is part of an UTF-16 Surrogate Pair.  
            // Note: not validating the pair, just used to bypass (any found part of) it.
            return (Character.isHighSurrogate(chr) || Character.isLowSurrogate(chr));
        }       
    
        private static List<Delimiter> getDefaultDelimiters(){
            // If no delimiter specified, "Capitalize after space" rule is set by default. 
            List<Delimiter> delimiters = new ArrayList<Delimiter>();
            delimiters.add(new Delimiter(Behavior.CAPITALIZE_AFTER_MARKER, ' '));
            return delimiters;
        } 
    
        public static class Delimiter {
            private Behavior behavior;
            private char delimiter;
    
            public Delimiter(Behavior behavior, char delimiter) {
                super();
                this.behavior = behavior;
                this.delimiter = delimiter;
            }
    
            public boolean capitalizeBefore(){
                return (behavior.equals(Behavior.CAPITALIZE_BEFORE_MARKER)
                        || behavior.equals(Behavior.CAPITALIZE_BEFORE_AND_AFTER_MARKER));
            }
    
            public boolean capitalizeAfter(){
                return (behavior.equals(Behavior.CAPITALIZE_AFTER_MARKER)
                        || behavior.equals(Behavior.CAPITALIZE_BEFORE_AND_AFTER_MARKER));
            }
    
            public char getDelimiter() {
                return delimiter;
            }
        }
    
        public static enum Behavior {
            CAPITALIZE_AFTER_MARKER(0),
            CAPITALIZE_BEFORE_MARKER(1),
            CAPITALIZE_BEFORE_AND_AFTER_MARKER(2);                      
    
            private int value;          
    
            private Behavior(int value) {
                this.value = value;
            }
    
            public int getValue() {
                return value;
            }           
        } 
    

    【讨论】:

      【解决方案8】:

      使用org.apache.commons.lang.StringUtils 非常简单。

      capitalizeStr = StringUtils.capitalize(str);
      

      【讨论】:

      【解决方案9】:

      有了这个简单的代码

      String example="hello";
      
      example=example.substring(0,1).toUpperCase()+example.substring(1, example.length());
      
      System.out.println(example);
      

      结果:你好

      【讨论】:

      • HELLO 怎么样,它返回 HELLO 但预期 Hello 所以你应该在第二个 SubString 中使用 toLowerCase()
      【解决方案10】:

      来自 Java 9+

      你可以像这样使用String::replaceAll

      public static void upperCaseAllFirstCharacter(String text) {
          String regex = "\\b(.)(.*?)\\b";
          String result = Pattern.compile(regex).matcher(text).replaceAll(
                  matche -> matche.group(1).toUpperCase() + matche.group(2)
          );
      
          System.out.println(result);
      }
      

      例子:

      upperCaseAllFirstCharacter("hello this is Just a test");
      

      输出

      Hello This Is Just A Test
      

      【讨论】:

        【解决方案11】:

        我正在使用以下功能。我认为它的性能更快。

        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();
        }
        

        【讨论】:

        • 在连接时始终使用 StringBuilder 而不是 +=
        • 为什么你认为它更快?
        【解决方案12】:

        使用 Split 方法将字符串拆分为单词,然后使用内置的字符串函数将每个单词大写,然后附加在一起。

        伪代码(ish)

        string = "the sentence you want to apply caps to";
        words = string.split(" ") 
        string = ""
        for(String w: words)
        
        //This line is an easy way to capitalize a word
            word = word.toUpperCase().replace(word.substring(1), word.substring(1).toLowerCase())
        
            string += word
        

        最后的字符串看起来像 “你想应用大写的句子”

        【讨论】:

          【解决方案13】:

          如果您需要大写标题,这可能很有用。它将由" " 分隔的每个子字符串大写,但指定的字符串除外,例如"a""the"。我还没有运行它,因为它已经晚了,不过应该没问题。在某一时刻使用 Apache Commons StringUtils.join()。如果你愿意,你可以用一个简单的循环来代替它。

          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
          }
          

          【讨论】:

          • 如果字符串中有双空格则中断,这对于输入来说是愚蠢的,但仅供参考。
          【解决方案14】:
          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());
          }
          

          【讨论】:

          • 欢迎来到 Stack Overflow!一般来说,如果答案包含对代码的用途的解释,以及为什么在不介绍其他人的情况下解决了问题,那么答案会更有帮助。
          • 迄今为止最简单的解决方案,避免使用外部库
          【解决方案15】:

          1。 Java 8 流

          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(" "));
          }
          

          例子:

          System.out.println(capitalizeAll("jon skeet")); // Jon Skeet
          System.out.println(capitalizeAll("miles o'Brien")); // Miles O'Brien
          System.out.println(capitalizeAll("old mcdonald")); // Old Mcdonald
          System.out.println(capitalizeAll(null)); // null
          

          对于foo bARFoo Bar,将map() 方法替换为以下内容:

          .map(t -> t.substring(0, 1).toUpperCase() + t.substring(1).toLowerCase())
          

          2。 String.replaceAll() (Java 9+)

          ublic 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));
          }
          

          例子:

          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
          

          3。 Apache Commons 文本

          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
          

          对于标题:

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

          详情请关注this tutorial

          【讨论】:

            【解决方案16】:
            BufferedReader br = new BufferedReader(new InputStreamReader(System.in));   
            
            System.out.println("Enter the sentence : ");
            
            try
            {
                String str = br.readLine();
                char[] str1 = new char[str.length()];
            
                for(int i=0; i<str.length(); i++)
                {
                    str1[i] = Character.toLowerCase(str.charAt(i));
                }
            
                str1[0] = Character.toUpperCase(str1[0]);
                for(int i=0;i<str.length();i++)
                {
                    if(str1[i] == ' ')
                    {                   
                        str1[i+1] =  Character.toUpperCase(str1[i+1]);
                    }
                    System.out.print(str1[i]);
                }
            }
            catch(Exception e)
            {
                System.err.println("Error: " + e.getMessage());
            }
            

            【讨论】:

            • 对于我这种新手来说,这是最简单、最基础、最好的答案!
            【解决方案17】:

            我决定为字符串中的单词大写添加另一种解决方案:

            • 单词在此定义为相邻的字母或数字字符;
            • 还提供了代理对;
            • 代码已针对性能进行了优化;和
            • 它仍然很紧凑。

            功能:

            public static String capitalize(String string) {
              final int sl = string.length();
              final StringBuilder sb = new StringBuilder(sl);
              boolean lod = false;
              for(int s = 0; s < sl; s++) {
                final int cp = string.codePointAt(s);
                sb.appendCodePoint(lod ? Character.toLowerCase(cp) : Character.toUpperCase(cp));
                lod = Character.isLetterOrDigit(cp);
                if(!Character.isBmpCodePoint(cp)) s++;
              }
              return sb.toString();
            }
            

            调用示例:

            System.out.println(capitalize("An à la carte StRiNg. Surrogate pairs: ??."));
            

            结果:

            An À La Carte String. Surrogate Pairs: ??.
            

            【讨论】:

              【解决方案18】:

              用途:

                  String text = "jon skeet, miles o'brien, old mcdonald";
              
                  Pattern pattern = Pattern.compile("\\b([a-z])([\\w]*)");
                  Matcher matcher = pattern.matcher(text);
                  StringBuffer buffer = new StringBuffer();
                  while (matcher.find()) {
                      matcher.appendReplacement(buffer, matcher.group(1).toUpperCase() + matcher.group(2));
                  }
                  String capitalized = matcher.appendTail(buffer).toString();
                  System.out.println(capitalized);
              

              【讨论】:

              • 与 toLowerCase 完美配合 -> "Matcher matcher = pattern.matcher(text.toLowerCase());" (对于像“JOHN DOE”这样的条目文本)
              【解决方案19】:

              有很多方法可以将第一个单词的首字母大写。我有个主意。很简单:

              public String capitalize(String str){
              
                   /* The first thing we do is remove whitespace from string */
                   String c = str.replaceAll("\\s+", " ");
                   String s = c.trim();
                   String l = "";
              
                   for(int i = 0; i < s.length(); i++){
                        if(i == 0){                              /* Uppercase the first letter in strings */
                            l += s.toUpperCase().charAt(i);
                            i++;                                 /* To i = i + 1 because we don't need to add               
                                                                  value i = 0 into string l */
                        }
              
                        l += s.charAt(i);
              
                        if(s.charAt(i) == 32){                   /* If we meet whitespace (32 in ASCII Code is whitespace) */
                            l += s.toUpperCase().charAt(i+1);    /* Uppercase the letter after whitespace */
                            i++;                                 /* Yo i = i + 1 because we don't need to add
                                                                 value whitespace into string l */
                        }        
                   }
                   return l;
              }
              

              【讨论】:

              • 感谢您尝试添加答案。这是一个合理的想法,但请注意,已经有一些基本功能可以做到这一点,并且与您提供的代码类似,并且接受的答案已经非常清楚地概述了所有这些。
              【解决方案20】:
                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);
                  }
              }
              

              【讨论】:

                【解决方案21】:

                这是一个简单的函数

                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();
                }
                

                【讨论】:

                【解决方案22】:

                这只是另一种方式:

                private String capitalize(String line)
                {
                    StringTokenizer token =new StringTokenizer(line);
                    String CapLine="";
                    while(token.hasMoreTokens())
                    {
                        String tok = token.nextToken().toString();
                        CapLine += Character.toUpperCase(tok.charAt(0))+ tok.substring(1)+" ";        
                    }
                    return CapLine.substring(0,CapLine.length()-1);
                }
                

                【讨论】:

                  【解决方案23】:

                  intiCap 的可重用方法:

                      public class YarlagaddaSireeshTest{
                  
                      public static void main(String[] args) {
                          String FinalStringIs = "";
                          String testNames = "sireesh yarlagadda test";
                          String[] name = testNames.split("\\s");
                  
                          for(String nameIs :name){
                              FinalStringIs += getIntiCapString(nameIs) + ",";
                          }
                          System.out.println("Final Result "+ FinalStringIs);
                      }
                  
                      public static String getIntiCapString(String param) {
                          if(param != null && param.length()>0){          
                              char[] charArray = param.toCharArray(); 
                              charArray[0] = Character.toUpperCase(charArray[0]); 
                              return new String(charArray); 
                          }
                          else {
                              return "";
                          }
                      }
                  }
                  

                  【讨论】:

                    【解决方案24】:

                    这是我的解决方案。

                    我今晚遇到了这个问题并决定搜索它。我几乎找到了 Neelam Singh 的答案,所以我决定解决这个问题(在空字符串上中断)并导致系统崩溃。

                    您要查找的方法在下面命名为capString(String s)。 它将“这里只有凌晨 5 点”变成“这里只有 5 点”。

                    代码注释很好,请尽情享受。

                    package com.lincolnwdaniel.interactivestory.model;
                    
                        public class StringS {
                    
                        /**
                         * @param s is a string of any length, ideally only one word
                         * @return a capitalized string.
                         * only the first letter of the string is made to uppercase
                         */
                        public static String capSingleWord(String s) {
                            if(s.isEmpty() || s.length()<2) {
                                return Character.toUpperCase(s.charAt(0))+"";
                            } 
                            else {
                                return Character.toUpperCase(s.charAt(0)) + s.substring(1);
                            }
                        }
                    
                        /**
                         *
                         * @param s is a string of any length
                         * @return a title cased string.
                         * All first letter of each word is made to uppercase
                         */
                        public static String capString(String s) {
                            // Check if the string is empty, if it is, return it immediately
                            if(s.isEmpty()){
                                return s;
                            }
                    
                            // Split string on space and create array of words
                            String[] arr = s.split(" ");
                            // Create a string buffer to hold the new capitalized string
                            StringBuffer sb = new StringBuffer();
                    
                            // Check if the array is empty (would be caused by the passage of s as an empty string [i.g "" or " "],
                            // If it is, return the original string immediately
                            if( arr.length < 1 ){
                                return s;
                            }
                    
                            for (int i = 0; i < arr.length; i++) {
                                sb.append(Character.toUpperCase(arr[i].charAt(0)))
                                        .append(arr[i].substring(1)).append(" ");
                            }
                            return sb.toString().trim();
                        }
                    }
                    

                    【讨论】:

                      【解决方案25】:

                      对于那些在 MVC 中使用 Velocity 的人,可以使用 the StringUtils class 中的 capitalizeFirstLetter() 方法。

                      【讨论】:

                        【解决方案26】:
                        String s="hi dude i                                 want apple";
                            s = s.replaceAll("\\s+"," ");
                            String[] split = s.split(" ");
                            s="";
                            for (int i = 0; i < split.length; i++) {
                                split[i]=Character.toUpperCase(split[i].charAt(0))+split[i].substring(1);
                                s+=split[i]+" ";
                                System.out.println(split[i]);
                            }
                            System.out.println(s);
                        

                        【讨论】:

                          【解决方案27】:
                          package corejava.string.intern;
                          
                          import java.io.DataInputStream;
                          
                          import java.util.ArrayList;
                          
                          /*
                           * wap to accept only 3 sentences and convert first character of each word into upper case
                           */
                          
                          public class Accept3Lines_FirstCharUppercase {
                          
                              static String line;
                              static String words[];
                              static ArrayList<String> list=new ArrayList<String>();
                          
                              /**
                               * @param args
                               */
                              public static void main(String[] args) throws java.lang.Exception{
                          
                                  DataInputStream read=new DataInputStream(System.in);
                                  System.out.println("Enter only three sentences");
                                  int i=0;
                                  while((line=read.readLine())!=null){
                                      method(line);       //main logic of the code
                                      if((i++)==2){
                                          break;
                                      }
                                  }
                                  display();
                                  System.out.println("\n End of the program");
                          
                              }
                          
                              /*
                               * this will display all the elements in an array
                               */
                              public static void display(){
                                  for(String display:list){
                                      System.out.println(display);
                                  }
                              }
                          
                              /*
                               * this divide the line of string into words 
                               * and first char of the each word is converted to upper case
                               * and to an array list
                               */
                              public static void method(String lineParam){
                                  words=line.split("\\s");
                                  for(String s:words){
                                      String result=s.substring(0,1).toUpperCase()+s.substring(1);
                                      list.add(result);
                                  }
                              }
                          
                          }
                          

                          【讨论】:

                            【解决方案28】:

                            如果你更喜欢番石榴......

                            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);
                                }
                            }));
                            

                            【讨论】:

                              【解决方案29】:
                              String toUpperCaseFirstLetterOnly(String str) {
                                  String[] words = str.split(" ");
                                  StringBuilder ret = new StringBuilder();
                                  for(int i = 0; i < words.length; i++) {
                                      ret.append(Character.toUpperCase(words[i].charAt(0)));
                                      ret.append(words[i].substring(1));
                                      if(i < words.length - 1) {
                                          ret.append(' ');
                                      }
                                  }
                                  return ret.toString();
                              }
                              

                              【讨论】:

                                【解决方案30】:

                                简明扼要的方法如下:

                                String name = "test";
                                
                                name = (name.length() != 0) ?name.toString().toLowerCase().substring(0,1).toUpperCase().concat(name.substring(1)): name;
                                
                                --------------------
                                Output
                                --------------------
                                Test
                                T 
                                empty
                                --------------------
                                

                                如果您尝试将名称值更改为三个值,它可以正常工作。没有错误。

                                【讨论】:

                                • 如果不止一个字怎么办
                                猜你喜欢
                                • 1970-01-01
                                • 1970-01-01
                                • 1970-01-01
                                • 1970-01-01
                                • 2010-10-29
                                • 1970-01-01
                                • 2016-03-17
                                • 2020-09-29
                                相关资源
                                最近更新 更多