【问题标题】:How to upper case every first letter of word in a string? [duplicate]如何将字符串中单词的每个首字母大写? [复制]
【发布时间】:2010-11-12 02:24:28
【问题描述】:

我有一个字符串:“hello good old world”,我想用 .toUpperCase() 将每个单词的每个首字母大写,而不是整个字符串。是否有现有的 java 助手可以完成这项工作?

【问题讨论】:

    标签: java string


    【解决方案1】:

    看看 ACL WordUtils。

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

    【讨论】:

    【解决方案2】:

    这里是代码

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

    【讨论】:

    • 你还没有理解这个问题,你只是将第一个(!)单词的第一个字母大写。一个字符串中有几个单词,每个单词的第一个字母必须大写。
    • +1 我喜欢这个,最简单的方法。但它需要放在一个循环中,以满足问题的需求
    • 这可以稍微改进一下。字符串的长度是已知的,因此您可以预先分配StringBuilder 的长度。因为无论如何你都要调用StringBuilder.append,所以不要费心在每个循环迭代中创建一个新的char[]和String:只需附加大写字母,然后使用String.charAt和String.substring的其余单词.最后,您可能应该允许将 Locale 传递给您可以使用区域设置敏感的 String.toUpperCase(Locale)。
    【解决方案3】:
    sString = sString.toLowerCase();
    sString = Character.toString(sString.charAt(0)).toUpperCase()+sString.substring(1);
    

    【讨论】:

      【解决方案4】:

      我不知道是否有一个功能,但如果没有现有的功能,这可以完成工作:

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

      【讨论】:

      • 很好,但是 words[i].substring(1) 不适用于像“a”这样的单字母单词。需要先检查长度。
      【解决方案5】:
      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 );
          }
      }
      

      输出:

      这是第一个 WORD 资本测试。

      这是首字母大写测试。

      【讨论】:

      • // 一法分转换 String sss = "Salem this is me"; String str= sss.replaceFirst(String.valueOf(sss.charAt(0)),String.valueOf((char)(sss.charAt(0)-32))); // CapitalizeFirstLetterInString System.out.println(str);
      【解决方案6】:

      这是一个非常简单、紧凑的解决方案。 str 包含你想要做大写的任何变量。

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

      最好使用 StringBuilder,因为 String 是不可变的,并且为每个单词生成新字符串的效率很低。

      【讨论】:

      • for 循环中的变量怎么样,我也必须使用 StringBuffer 吗?每次循环迭代变量值都发生了变化?我的天啊。 @binkdm
      【解决方案7】:

      尝试比将字符串拆分为多个字符串来提高内存效率,并使用 Darshana Sri Lanka 展示的策略。此外,处理单词之间的所有空格,而不仅仅是 " " 字符。

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

      【讨论】:

      • 另外请注意,在 EditText 视图中,您可以指定 android:inputType="textCapWords" 它将自动将每个单词的第一个字母大写。保存调用此方法。
      • 这对我来说是完美的。感谢您的解决方案。我想现在我们都知道 EditText 可以大写单词,但我需要一个解决方案,其中输入不会进入 EditText。
      • 使用 android:inputType="textCapWords" 只是改变了键盘的初始大写状态,如果用户按下然后仍然可以输入小写字母,所以如果有必要强制初始大写你会需要做预提交处理。
      【解决方案8】:
          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);  
      

      输出:Java 是一种面向对象的编程语言。

      【讨论】:

        【解决方案9】:

        您还可以查看StringUtils 库。它有很多很酷的东西。

        【讨论】:

        • 您理解问题了吗?你检查了接受的答案吗?您在发布之前验证了链接吗?你检查过主题的日期吗?
        • StringUtils +1,但请更新您的链接 :)
        【解决方案10】:

        阅读以上几个答案后我的代码。

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

        【讨论】:

          【解决方案11】:
          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
          

          【讨论】:

            【解决方案12】:
            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());
               }
            
            }
            

            【讨论】:

              【解决方案13】:
              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);
                    }
                  }
              }
              

              【讨论】:

                【解决方案14】:

                这是一个简单的解决方案:

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

                【讨论】:

                • wordCapital = ... 在 for 循环中需要一个加号:wordCapital += ... 否则你只会得到最后一个字。查看结果:ideone.com/fHCE6E
                【解决方案15】:
                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();
                }
                

                【讨论】:

                • Uhg - 在循环中追加字符串!请使用 StringBuilder。
                • String new =old.substring(0, 1).toUpperCase() + old.substring(1);
                【解决方案16】:

                正则表达式简单得多:

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

                输入输出:“this sentence Has Weird caps”

                这句话有奇怪的大写

                【讨论】:

                  猜你喜欢
                  • 2014-05-19
                  • 2010-12-05
                  • 2020-02-22
                  • 1970-01-01
                  • 2014-06-19
                  • 1970-01-01
                  相关资源
                  最近更新 更多