2011-04-20 137 views
162

可能重复:
How to capitalize the first character of each word in a string如何在使用Java的字符串中首字母大写?

例串

one thousand only 
two hundred 
twenty 
seven 

如何改变一个字符串的第一个字符的大写字母和不改变任何的情况下,其他字母?

的变化之后,它应该是:

One thousand only 
Two hundred 
Twenty 
Seven 

注:我不想用apache.commons.lang.WordUtils做到这一点。

+0

我不太熟悉java,但ascii表中大写和小写字母的区别是32,所以你只需要减去32就可以得到它的等效资本。 http://www.asciitable.com/ – 2011-04-20 05:32:16

+0

@eat_a_lemon:使用Character.toUpperCase()更好,因为它处理的不是a-z(例如数字,标点符号,带有变音符号的字母,非拉丁字符)的情况。 – 2011-04-20 05:40:30

+2

@Simon我一直在写太多C最近lol – 2011-04-20 07:45:07

回答

441

如果你只是想利用一个名为input字符串的第一个字母,并独自离开,其余:

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

现在output会有你想要的。在使用这个之前检查你的input是否至少有一个字符长,否则你会得到一个异常。

+1

@Simon:在你的评论之前我刚刚添加了一条关于该权利的说明:) – WhiteFang34 2011-04-20 05:44:25

+24

另外,我首先将整个输入作为小写或者重写你的例子,如下所示:String output = input.substring( 0,1).toUpperCase()+ input.substring(1).toLowerCase(); – 2013-10-30 10:48:20

+0

你想检查字符串的长度,因为它可能是1个字母的字符串,甚至是0。 – 2017-10-06 14:18:52

2

在这里你去(希望这会给你的想法):

/************************************************************************* 
* Compilation: javac Capitalize.java 
* Execution: java Capitalize < input.txt 
* 
* Read in a sequence of words from standard input and capitalize each 
* one (make first letter uppercase; make rest lowercase). 
* 
* % java Capitalize 
* now is the time for all good 
* Now Is The Time For All Good 
* to be or not to be that is the question 
* To Be Or Not To Be That Is The Question 
* 
* Remark: replace sequence of whitespace with a single space. 
* 
*************************************************************************/ 

public class Capitalize { 

    public static String capitalize(String s) { 
     if (s.length() == 0) return s; 
     return s.substring(0, 1).toUpperCase() + s.substring(1).toLowerCase(); 
    } 

    public static void main(String[] args) { 
     while (!StdIn.isEmpty()) { 
      String line = StdIn.readLine(); 
      String[] words = line.split("\\s"); 
      for (String s : words) { 
       StdOut.print(capitalize(s) + " "); 
      } 
      StdOut.println(); 
     } 
    } 

} 
+0

而不改变其他字母的情况。此外,您对'StdIn'和'StdOut'的使用不是非常Java-y。 :-) – 2011-04-20 05:41:56

69
public String capitalizeFirstLetter(String original) { 
    if (original == null || original.length() == 0) { 
     return original; 
    } 
    return original.substring(0, 1).toUpperCase() + original.substring(1); 
} 

只是...一个完整的解决方案,我看到它只是结合了其他人最终发布= P的结果。

+11

不错。我“单线”它: 'return original.length()== 0?原始:original.substring(0,1).toUpperCase()+ original.substring(1);' – mharper 2013-09-20 21:13:01

+2

@mharper:'if length()== 0',我们不能说它是''“'和返回而不是'原始'?在一行中为我们节省了几个字符。我问,因为我觉得Java是一种如此充满陷阱的语言,如果有其他方式让长度为零的字符串,我真的不会感到惊讶。 – ArtOfWarfare 2015-03-03 20:24:13

+0

你会说出所有的真相@ArtOfWarfare。 – mharper 2015-03-04 04:30:19

3
String s=t.getText().trim(); 
int l=s.length(); 
char c=Character.toUpperCase(s.charAt(0)); 
s=c+s.substring(1); 
for(int i=1; i<l; i++) 
    { 
     if(s.charAt(i)==' ') 
     { 
      c=Character.toUpperCase(s.charAt(i+1)); 
      s=s.substring(0, i) + c + s.substring(i+2); 
     } 
    } 
    t.setText(s); 
+1

这将大写*每个*词的第一个字母,而不是整个字符串。请参阅OP提供的示例。如果字符串末尾有空格,也可能会出现问题。 – 2012-09-25 16:47:14

40

最简单的方法是使用org.apache.commons.lang.StringUtils

StringUtils.capitalize(Str);

+6

这里的小方面。它仅适用于尚未大写的字符串。 – jobbert 2016-05-09 13:49:47

1

实施例使用StringTokenizer类:

String st = " hello all students"; 
String st1; 
char f; 
String fs=""; 
StringTokenizer a= new StringTokenizer(st); 
while(a.hasMoreTokens()){ 
     st1=a.nextToken(); 
     f=Character.toUpperCase(st1.charAt(0)); 
     fs+=f+ st1.substring(1); 
     System.out.println(fs); 
} 
5
String sentence = "ToDAY WeAthEr GREat";  
public static String upperCaseWords(String sentence) { 
     String words[] = sentence.replaceAll("\\s+", " ").trim().split(" "); 
     String newSentence = ""; 
     for (String word : words) { 
      for (int i = 0; i < word.length(); i++) 
       newSentence = newSentence + ((i == 0) ? word.substring(i, i + 1).toUpperCase(): 
        (i != word.length() - 1) ? word.substring(i, i + 1).toLowerCase() : word.substring(i, i + 1).toLowerCase().toLowerCase() + " "); 
     } 

     return newSentence; 
    } 
//Today Weather Great 
0

使用此:

char[] chars = {Character.toUpperCase(A.charAt(0)), 
Character.toUpperCase(B.charAt(0))}; 
String a1 = chars[0] + A.substring(1); 
String b1 = chars[1] + B.substring(1); 
-1

你可以简单地在java.util包中使用一个内置功能:

>> import java.util.*; 

>> System.out.println(capitalize(input)); 

确保字符串不前手大写。

+4

此功能属于哪一类? – jkschneider 2017-08-15 18:29:17

7

此外,还有org.springframework.util.StringUtilsSpring框架

StringUtils.capitalize(str); 
0

解决方案与StringBuilder的:

value = new StringBuilder() 
       .append(value.substring(0, 1).toUpperCase()) 
       .append(value.substring(1)) 
       .toString(); 

。基于以前的答案

-1

其简单的只有一个行代码是需要的。 if String A = scanner.nextLine(); 然后你需要写这个来显示第一个字母大写的字符串。

System.out.println(A.substring(0, 1).toUpperCase() + A.substring(1));

而且它现在完成了。