如何在Java中大写字符串的首字母?


304

我正在使用Java String从用户那里获取输入。我正在尝试将此输入的首字母大写。

我尝试了这个:

String name;

BufferedReader br = new InputStreamReader(System.in);

String s1 = name.charAt(0).toUppercase());

System.out.println(s1 + name.substring(1));

导致这些编译器错误:

  • 类型不匹配:无法从InputStreamReader转换为BufferedReader

  • 无法在基本类型char上调用toUppercase()


2
@Pontus-我不同意。对于输入“ abcd”,OP希望输出“ Abcd”。似乎很清楚,尽管问题本来可以更好。
科比


character是Java中的原始数据类型。您不能使用dot(。)运算符取消引用原始数据类型。您必须按名称对第一个字符进行字符串化处理。substring(0,1);
Divakar Rajesh

Answers:


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

1
我认为您需要在str.length()之后加上-1,否则您将超出范围。
dutt

@dutt:不,实际上也很好。但是Rekin的修改使其完美。;)
Adeel Ansari 2010年

common lang总比编写自己的函数好,除非在少数情况下您更了解。如果您不去阅读大写的lang Java语言文档,那您就不应该自己编写。
The.Laughing.Man

211

我使用的是WordUtils,它也具有相同的功能,但是将句子中所有单词的首字母大写。
Surbhit Rao

StringUtils.capitalize( "fred from jupiter" );产生"Fred from jupiter"。容易...:D
udoline '19

WordUtils.capitalizeFully()为我工作时就像魅力一样,它给人的感觉是:WordUtils.capitalizeFully(“ i am FINE”)=“我很好”
Atul Sharma

91

字符串首字母大写的较短/更快的版本代码为:

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

的值name"Stackoverflow"


4
我喜欢此解决方案,因为它可以确保字符串的其余部分为小写。从ALL_CAPS枚举名称转换时,这就是我所需要的。
Ellen Spertus

54

使用Apache的公共库。从这些东西中解放出来,避免空指针和索引超出范围的异常

步骤1:

通过将apache的公共lang库放入build.gradle依赖项来导入

compile 'org.apache.commons:commons-lang3:3.6'

第2步:

如果您确定您的字符串全部为小写字母,或者只需要初始化第一个字母,则直接调用

StringUtils.capitalize(yourString);

如果要确保仅将首字母大写,例如对an进行此操作enumtoLowerCase()请先调用并记住,NullPointerException如果输入字符串为null ,则它将抛出。

StringUtils.capitalize(YourEnum.STUFF.name().toLowerCase());
StringUtils.capitalize(yourString.toLowerCase());

这是apache提供的更多示例。没有例外

StringUtils.capitalize(null)  = null
StringUtils.capitalize("")    = ""
StringUtils.capitalize("cat") = "Cat"
StringUtils.capitalize("cAt") = "CAt"
StringUtils.capitalize("'cat'") = "'cat'"

注意:

WordUtils也包含在此库中,但已弃用。请不要使用它。


2
谢谢。我不敢相信人们甚至会想到使用for循环执行此类任务
Alvaro

@Alvaro,归根结底-人们确实为此任务使用循环,请检查apache源代码。但这并不意味着人们不应该使用经过良好测试的解决方案。
尤里·切尔尼绍夫

@YuriyChernyshov可以肯定的是,我的意思是,他们大部分时间不应该重新发明生产代码的轮子
Alvaro

WordUtils.capitalizeFully()为我工作时就像魅力一样,因为它赋予了它:WordUtils.capitalizeFully(“ i am FINE”)=“我很好”
Atul Sharma

我绝不会为了诸如的小目的而去外部库How to capitalize the first letter of a String in Java?
堆栈溢出

24

Java:

只是一个大写每个字符串的辅助方法。

public static String capitalize(String str)
{
    if(str == null) return str;
    return str.substring(0, 1).toUpperCase() + str.substring(1);
}

之后,只需致电 str = capitalize(str)


科特林:

str.capitalize()

如果str为null ,则将引发异常。使用此字符串之前,请检查该字符串是否不为null且至少包含一个字符。
attacomsian

@attacomsian,您是对的,我更新了Java代码,对于Kotlin,您可以使用str?.capitalize()
Amir Hossein Ghasemi

22

您想做的可能是这样的:

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

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

另外,您将创建一个输入流读取器,但从不读取任何行。因此name将永远是null

这应该工作:

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


12

以下解决方案将起作用。

String A = "stackOverflow";
String ACaps = A.toUpperCase().charAt(0)+A.substring(1,A.length());
//Will print StackOverflow

您不能在原始char上使用toUpperCase(),但是您可以先将整个String设置为大写,然后采用第一个char,然后将其追加到子字符串上,如上所示。


toUpperCase受到限制。
Harpreet Sandhu-TheRootCoder

有问题的是,他试图在不起作用的原始类型上使用UpUpCase。
Jijil Kakkadathu

1
哦。我错过了那件事。(y)
Harpreet Sandhu-TheRootCoder 18-10-26

1
亲爱的好答案
Dulaj Kulathunga,


7

也是最短的:

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

为我工作。


6

将字符串设置为小写,然后将第一个字母设置为大写,如下所示:

    userName = userName.toLowerCase();

然后大写第一个字母:

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

substring只是得到了一个更大的字符串,然后我们将它们重新组合在一起。


7
我怎么得到它,第一行代码是没有用的,因为其余的字符串都以小写形式设置。
哈佛尼加德

6

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

6

使用此实用程序方法来获取所有首字母大写。

String captializeAllFirstLetter(String name) 
{
    char[] array = name.toCharArray();
    array[0] = Character.toUpperCase(array[0]);

    for (int i = 1; i < array.length; i++) {
        if (Character.isWhitespace(array[i - 1])) {
            array[i] = Character.toUpperCase(array[i]);
        }
    }

    return new String(array);
}


4

您也可以尝试以下操作:

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

比使用子字符串更好(优化)。(但不用担心小字符串)


4

您可以substring()用来执行此操作。

但是有两种不同的情况:

情况1

如果String您使用大写字母是为了便于人们阅读,则还应指定默认语言环境:

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

情况二

如果String您要大写的字母是机器可读的,请避免使用,Locale.getDefault()因为返回的字符串在不同区域之间会不一致,在这种情况下,请始终指定相同的语言环境(例如,toUpperCase(Locale.ENGLISH))。这将确保您用于内部处理的字符串是一致的,这将有助于您避免难以发现的错误。

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


4

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

4

如果您使用SPRING

import static org.springframework.util.StringUtils.capitalize;
...


    return capitalize(name);

注意:如果您已经具有Apache Common Lang依赖项,请考虑使用其StringUtils.capitalize作为其他答案的建议。

实施: https : //github.com/spring-projects/spring-framework/blob/64440a5f04a17b3728234afaa89f57766768decb/spring-core/src/main/java/org/springframework/util/StringUtils.java#L535-L555

参考: https : //docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/util/StringUtils.html#capitalize-java.lang.String-


4

它将工作101%

public class UpperCase {

    public static void main(String [] args) {

        String name;

        System.out.print("INPUT: ");
        Scanner scan = new Scanner(System.in);
        name  = scan.next();

        String upperCase = name.substring(0, 1).toUpperCase() + name.substring(1);
        System.out.println("OUTPUT: " + upperCase); 

    }

}

3

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

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


1
为“没错” +1。我宁愿 Character.toString(name.charAt(0))""+name.charAt(0)显示自己真正想做的事情。
user85421

没有空长度检查。长度可以为零。
Chrispix


3

您可以使用以下代码:

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

}

3

试试这个

该方法的作用是,考虑单词“ 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();

    }

但是这段代码似乎可以理解,所有方法的名称也很容易理解。但是感谢您的评论,从下一次开始,我将变得更加完美,-)
Ameen Maheen

奇迹般有效!
TheVinceble '17

3

给出的答案仅用于大写一个单词的第一个字母。使用以下代码将整个字符串大写。

public static void main(String[] args) {
    String str = "this is a random string";
    StringBuilder capitalizedString = new StringBuilder();
    String[] splited = str.trim().split("\\s+");

    for (String string : splited) {         
        String s1 = string.substring(0, 1).toUpperCase();
        String nameCapitalized = s1 + string.substring(1);

        capitalizedString.append(nameCapitalized);
        capitalizedString.append(" ");
    }
    System.out.println(capitalizedString.toString().trim());
}

输出: This Is A Random String


3

如果Input为UpperCase,则使用以下命令:

str.substring(0,1).toUpperCase()+ str.substring(1).toLowerCase();

如果Input为LowerCase,则使用以下命令:

str.substring(0,1).toUpperCase()+ str.substring(1);



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

2

您可以使用以下代码:

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的示例测试:

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

2

使用commons.lang.StringUtils最佳答案是:

public static String capitalize(String str) {  
    int strLen;  
    return str != null && (strLen = str.length()) != 0 ? (new StringBuffer(strLen)).append(Character.toTitleCase(str.charAt(0))).append(str.substring(1)).toString() : str;  
}

我发现它很棒,因为它用StringBuffer包裹了字符串。您可以根据需要并使用相同的实例来操作StringBuffer。


2

又一个示例,如何使用户输入的首字母大写:

BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String string = br.readLine();
// handle supplementary characters
IntStream.concat(
        IntStream.of(string.codePointAt(0))
                .map(Character::toUpperCase), string.codePoints().skip(1)
)
.forEach(cp -> System.out.print(Character.toChars(cp)));
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.