【问题标题】:Make String first letter capital in java在java中使String首字母大写
【发布时间】:2013-06-06 05:52:57
【问题描述】:

到目前为止,我正在使用此代码将我的第一个字母设为大写字符串

String output = input.substring(0, 1).toUpperCase() + input.substring(1);

这对我来说似乎很脏..有没有直接或优雅的方式..

【问题讨论】:

  • StringUtils.capitalize()?在 Java 中寻找优雅是……嗯,有更好的投资回报率。实用程序库的存在是有原因的。
  • 您需要考虑语言环境吗?每个语言环境都有不同的更改字母大小写的规则。
  • @erickson 不需要。英语对我来说就足够了。
  • stackoverflow.com/questions/3904579/…(虽然这个用词更清楚)。

标签: java string capitalize


【解决方案1】:

这个怎么样:

String output = Character.toUpperCase(input.charAt(0)) + input.substring(1);

如果不使用外部库,我想不出任何更清洁的东西,但这绝对比你现在拥有的要好。

【讨论】:

  • 我认为 Marco 的意思是,"" 或 null 将失败; StringUtils.capitalize 不会失败。
  • @JoopEggen 这与 OP 的原始代码具有完全相同的行为,而 StringUtils.capitalize 没有。
  • 我什至不明白为什么这会被否决,在我看来这是最好的方法,除非我错过了什么
  • StringUtils.capitalize( "fred from jupiter" ); 产生"Fred from jupiter"。这就是你所需要的!
【解决方案2】:

你应该看看Apache Commons Lang lib 中的StringUtils 类 - 它有方法.capitalize()

来自库的描述:

大写一个字符串,将第一个字母更改为标题大小写 Character.toTitleCase(char)。其他字母没有变化。

【讨论】:

  • 请注意,如果您只想将第一个字母大写(例如,用于格式化名称),如果您怀疑字符串中可能已经有大写字母,则可能需要在运行大写之前将整个字符串小写.来自 JavaDoc: StringUtils.capitalize("cAt") = "CAt"
  • Capitalize 会将每个单词的首字母大写,而不仅仅是第一个
  • StringUtils.capitalize( "fred from jupiter" ); 产生"Fred from jupiter"。只有来自 String-object 的 first 字符会被大写。
【解决方案3】:
String out = Character.toUpperCase(inText.charAt(0)) + inText.substring(1).toLowerCase();

【讨论】:

    【解决方案4】:
    public static void main(String[] args) {
        String str = null;
        String outStr = null;
        Scanner sc = new Scanner(System.in);
        System.out.println("Enter a String: ");
        str = sc.nextLine();
        //c= Character.toUpperCase(str.charAt(0));
    
        for(int i=0; i< (str.length());i++){
    
            if(str.charAt(i)==' '){
    
                outStr= outStr.substring(0,i+1)+str.substring(i+1,i+2).toUpperCase()+str.substring(i+2);
    
            }else if(i==0){
    
                outStr=str.substring(0,1).toUpperCase()+str.substring(1);
    
            }
        }
        System.out.println("STRING::"+outStr);
    }
    

    【讨论】:

    • 如果我输入像_123 这样的字符串(以空格开头),它会抛出NullPointerException。与其他人相比,您的答案似乎也有点复杂。
    • 好吧,不仅如此,如果你在最后添加一个空格,我的程序也应该抛出 NullPointerException。我没有做过这些检查,如果你愿意,你可以使用正则表达式......我只是给出了如何实现的框架。
    【解决方案5】:

    假设您可以使用 Java 8,这是没有人要求的功能方式...

    import java.util.Optional;
    import java.util.stream.IntStream;
    
    public class StringHelper {
        public static String capitalize(String source) {
            return Optional.ofNullable(source)
                .map(str -> IntStream.concat(
                    str.codePoints().limit(1).map(Character::toUpperCase),
                    str.codePoints().skip(1)))
                .map(stream -> stream.toArray())
                .map(arr -> new String(arr, 0, arr.length))
                .orElse(null);
        }
    }
    

    它的优雅之处在于它无需任何条件语句即可处理空字符串和空字符串的情况。

    【讨论】:

    • StringUtils.capitalize( "fred from jupiter" ); 产生"Fred from jupiter"。它的源代码更少......:D
    【解决方案6】:
    Character.toString(a.charAt(0)).toUpperCase()+a.substring(1)
    

    P.S = a 是字符串。

    【讨论】:

      【解决方案7】:

      这里,hold my beer

      String foo = "suresh";
      String bar = foo.toUpperCase();
      if(bar.charAt[0] == 'S'){
         throw new SuccessException("bar contains 'SURESH' and has the first letter capital").
      }
      

      【讨论】:

        【解决方案8】:
        class strDemo3
        {
            public static void main(String args[])
            {
                String s1=new String(" the ghost of the arabean sea");
                char c1[]=new char[30];       
                int c2[]=new int[30];
                s1.getChars(0,28,c1,0);
                for(int i=0;i<s1.length();i++)
                {
                   System.out.print(c1[i]);
                }
                for(int i=1;i<s1.length();i++)
                {
                   c2[i]=c1[i];
                   if(c1[i-1]==' ')
                   {
                       c2[i]=c2[i]-32;
                   }
                   c1[i]=(char)c2[i];          
                }
                for(int i=0;i<s1.length();i++)
                {
                   System.out.print(c1[i]);
                }            
               }
        }
        

        【讨论】:

        • 请不要只发布 OP 可能无法理解的代码。一步一步解释你的答案并给出建议。
        • 我的代码现在看起来更漂亮了 :) 不过感谢您的回答。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-07-29
        • 2011-05-14
        • 1970-01-01
        • 2011-03-29
        • 2011-11-13
        • 1970-01-01
        • 2011-06-16
        相关资源
        最近更新 更多