如何在Java中首字母大写string?

我正在使用Java从用户获取一个Stringinput。 我正在尝试使这个input的第一个字母大写。

我试过这个:

 String name; BufferedReader br = new InputStreamReader(System.in); String s1 = name.charAt(0).toUppercase()); System.out.println(s1 + name.substring(1)); 

这导致了这些编译器错误:

  • types不匹配:无法从InputStreamReader转换到BufferedReader

  • 无法在原始typeschar上调用toUppercase()

 String str = "java"; String cap = str.substring(0, 1).toUpperCase() + str.substring(1); // cap = "Java" 

用你的例子:

 public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); // Actually use the Reader String name = br.readLine(); // Don't mistake String object with a Character object String s1 = name.substring(0, 1).toUpperCase(); String nameCapitalized = s1 + name.substring(1); System.out.println(nameCapitalized); } 

StringUtils.capitalize(..)来自commons-lang

大写string的第一个字母的较短/较快的版本代码是:

 String name = "stackoverflow"; name = name.substring(0,1).toUpperCase() + name.substring(1).toLowerCase(); 

name的值是"Stackoverflow"

你想要做的可能是这样的:

 s1 = name.substring(0, 1).toUpperCase() + name.substring(1); 

(将第一个字符转换为大写,并添加原始string的其余部分)

此外,您创build一个inputstream阅读器,但从来没有读过任何一行。 因此, name将始终为null

这应该工作:

 BufferedReader br = new InputstreamReader(System.in); String name = br.readLine(); String s1 = name.substring(0, 1).toUpperCase() + name.substring(1); 

来自Apache Commons的 WordUtils.capitalize(java.lang.String)

使用WordUtils.capitalize(str)

 String str1 = "hello"; str1.substring(0, 1).toUpperCase()+str1.substring(1); 

将string设置为小写,然后将第一个字母设置为上面的像这样:

  userName = userName.toLowerCase(); 

然后把第一个字母大写:

  userName = userName.substring(0, 1).toUpperCase() + userName.substring(1).toLowerCase(); 

子串只是得到一个较大的string,然后我们把它们组合在一起。

最短也是:

 String message = "my message"; message = Character.toUpperCase(message.charAt(0)) + message.substring(1); System.out.println(message) // Will output: My message 

为我工作。

在Android Studio中

添加这个依赖到你的build.gradle (Module: app)

 dependencies { ... compile 'org.apache.commons:commons-lang3:3.1' ... } 

现在你可以使用

 String string = "STRING WITH ALL CAPPS AND SPACES"; string = string.toLowerCase(); // Make all lowercase if you have caps someTextView.setText(WordUtils.capitalize(string)); 

这只是为了告诉你,你没有错。

 BufferedReader br = new InputstreamReader(System.in); // Assuming name is not blank String name = br.readLine(); //No more error telling that you cant convert char to string String s1 = (""+name.charAt(0)).toUppercase()); // Or, as Carlos prefers. See the comments to this post. String s1 = Character.toString(name.charAt(0)).toUppercase()); System.out.println(s1+name.substring(1)); 

注意: 这不是最好的办法。 这只是为了显示OP,它也可以使用charAt()来完成。 ;)

你也可以试试这个:

  String s1 = br.readLine(); char[] chars = s1.toCharArray(); chars[0] = Character.toUpperCase(chars[0]); s1= new String(chars); System.out.println(s1); 

这比使用子string更好(优化)。 (但不要担心小string)

你可以使用substring()来做到这一点。

但是有两种不同的情况:

情况1

如果您正在使用的String是人类可读的,则还应该指定默认语言环境:

 String firstLetterCapitalized = myString.substring(0, 1).toUpperCase(Locale.getDefault()) + myString.substring(1); 

案例2

如果您正在使用的string是机器可读的,请避免使用Locale.getDefault()因为返回的string在不同区域之间将不一致,并且在此情况下总是指定相同的区域设置(例如toUpperCase(Locale.ENGLISH) )。 这将确保您用于内部处理的string是一致的,这将帮助您避免难以发现的错误。

注意:您不必为toLowerCase()指定Locale.getDefault() toLowerCase() ,因为这是自动完成的。

看看ACL的WordUtils。

WordUtils.capitalize(“你的string”)==“你的string”

如何将大写字母中的每个第一个字母大写?

 public static String capitalizer(final String texto) { // split words String[] palavras = texto.split(" "); StringBuilder sb = new StringBuilder(); // list of word exceptions List<String> excessoes = new ArrayList<String>(Arrays.asList("de", "da", "das", "do", "dos", "na", "nas", "no", "nos", "a", "e", "o", "em", "com")); for (String palavra : palavras) { if (excessoes.contains(palavra.toLowerCase())) sb.append(palavra.toLowerCase()).append(" "); else sb.append(Character.toUpperCase(palavra.charAt(0))).append(palavra.substring(1).toLowerCase()).append(" "); } return sb.toString().trim(); } 

怎么样WordUtils.capitalizeFully() ?

 import org.apache.commons.lang3.text.WordUtils; public class Main { public static void main(String[] args) { final String str1 = "HELLO WORLD"; System.out.println(capitalizeFirstLetter(str1)); // output: Hello World final String str2 = "Hello WORLD"; System.out.println(capitalizeFirstLetter(str2)); // output: Hello World final String str3 = "hello world"; System.out.println(capitalizeFirstLetter(str3)); // output: Hello World final String str4 = "heLLo wORld"; System.out.println(capitalizeFirstLetter(str4)); // output: Hello World } private static String capitalizeFirstLetter(String str) { return WordUtils.capitalizeFully(str); } } 

试试这个

这个方法所做的就是把“Hello world”这个方法变成“Hello World”,把每个单词的开头都写成大写。

  private String capitalizer(String word){ String[] words = word.split(" "); StringBuilder sb = new StringBuilder(); if (words[0].length() > 0) { sb.append(Character.toUpperCase(words[0].charAt(0)) + words[0].subSequence(1, words[0].length()).toString().toLowerCase()); for (int i = 1; i < words.length; i++) { sb.append(" "); sb.append(Character.toUpperCase(words[i].charAt(0)) + words[i].subSequence(1, words[i].length()).toString().toLowerCase()); } } return sb.toString(); } 

这将工作

 char[] array = value.toCharArray(); array[0] = Character.toUpperCase(array[0]); String result = new String(array); 

您可以使用下面的代码:

 public static void main(String[] args) { capitalizeFirstLetter("java"); capitalizeFirstLetter("java developer"); } public static void capitalizeFirstLetter(String text) { StringBuilder str = new StringBuilder(); String[] tokens = text.split("\\s");// Can be space,comma or hyphen for (String token : tokens) { str.append(Character.toUpperCase(token.charAt(0))).append(token.substring(1)).append(" "); } str.toString().trim(); // Trim trailing space System.out.println(str); } 

许多答案是非常有用的,所以我用它们来创build一个方法来将任何string转换为标题(第一个字符大写):

 static String toTitle (String s) { String s1 = s.substring(0,1).toUpperCase(); String sTitle = s1 + s.substring(1); return sTitle; } 

您可以使用下面的代码:

 public static String capitalizeString(String string) { if (string == null || string.trim().isEmpty()) { return string; } char c[] = string.trim().toLowerCase().toCharArray(); c[0] = Character.toUpperCase(c[0]); return new String(c); } 

使用JUnit进行示例testing:

 @Test public void capitalizeStringUpperCaseTest() { String string = "HELLO WORLD "; string = capitalizeString(string); assertThat(string, is("Hello world")); } @Test public void capitalizeStringLowerCaseTest() { String string = "hello world "; string = capitalizeString(string); assertThat(string, is("Hello world")); } 

下面的例子还将特殊字符(例如[/ – ]

  public static String capitalize(String text) { char[] stringArray = text.trim().toCharArray(); boolean wordStarted = false; for( int i = 0; i < stringArray.length; i++) { char ch = stringArray[i]; if ((ch >= 'a' && ch <= 'z') || (ch >= 'A' && ch <= 'Z') || ch == '\'') { if( !wordStarted ) { stringArray[i] = Character.toUpperCase(stringArray[i]); wordStarted = true; } } else { wordStarted = false; } } return new String(stringArray); } Example: capitalize("that's a beautiful/wonderful life we have.We really-do") Output: That's A Beautiful/Wonderful Life We Have.We Really-Do 

感谢我阅读了一些评论,并带来了以下内容

 public static void main(String args[]) { String myName = "nasser"; String newName = myName.toUpperCase().charAt(0) + myName.substring(1); System.out.println(newName ); } 

我希望它有助于好运

Ameen Mahheen的答案很好,但是如果我们有一些双倍空间的string,比如“hello world”,那么sb.append会得到IndexOutOfBounds Exception。 正确的做法是在这行之前进行testing:

 private String capitalizer(String word){ String[] words = word.split(" "); StringBuilder sb = new StringBuilder(); if (words[0].length() > 0) { sb.append(Character.toUpperCase(words[0].charAt(0)) + words[0].subSequence(1, words[0].length()).toString().toLowerCase()); for (int i = 1; i < words.length; i++) { sb.append(" "); if (words[i].length() > 0) sb.append(Character.toUpperCase(words[i].charAt(0)) + words[i].subSequence(1, words[i].length()).toString().toLowerCase()); } } return sb.toString(); } 

你可以试试这个

 /** * capitilizeFirst(null) -> "" * capitilizeFirst("") -> "" * capitilizeFirst(" ") -> "" * capitilizeFirst(" df") -> "Df" * capitilizeFirst("AS") -> "As" * * @param str input string * @return String with the first letter capitalized */ public String capitilizeFirst(String str) { // assumptions that input parameter is not null is legal, as we use this function in map chain Function<String, String> capFirst = (String s) -> { String result = ""; // <-- accumulator try { result += s.substring(0, 1).toUpperCase(); } catch (Throwable e) {} try { result += s.substring(1).toLowerCase(); } catch (Throwable e) {} return result; }; return Optional.ofNullable(str) .map(String::trim) .map(capFirst) .orElse(""); } 

您可以使用Class WordUtils。

假设你的string是“当前地址”,然后使用

****强壮的文字Wordutils.capitaliz(String); 输出:当前地址

请参阅: http : //commons.apache.org/proper/commons-lang/apidocs/org/apache/commons/lang3/text/WordUtils.html

 class CapitalizeWords { public static void main(String[] args) { String input ="welcome to kashmiri geeks..."; System.out.println(input); String[] str = input.split(" "); for(int i=0; i< str.length; i++) { str[i] = (str[i]).substring(0,1).toUpperCase() + (str[i]).substring(1); } for(int i=0;i<str.length;i++) { System.out.print(str[i]+" "); } } } 
 public void capitalizeFirstLetter(JTextField textField) { try { if (!textField.getText().isEmpty()) { StringBuilder b = new StringBuilder(textField.getText()); 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()); textField.setText(b.toString()); } } catch (Exception e) { e.printStackTrace(); JOptionPane.showMessageDialog(null, e, "Error", JOptionPane.ERROR_MESSAGE); } } 

只是重新修复了Jorgesys的代码,并增加了一些检查,因为很less有与string长度有关的情况。 在我的情况下不要做空引用检查。

  public static String capitalizeFirstLetter(@NonNull String customText){ int count = customText.length(); if (count == 0) { return customText; } if (count == 1) { return customText.toUpperCase(); } return customText.substring(0, 1).toUpperCase() + customText.substring(1).toLowerCase(); } 
 System.out.println(Character.toString(A.charAt(0)).toUpperCase()+A.substring(1)); 

PS = a是一个string。