我正在使用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()



评论

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

stackoverflow.com/questions/1892765/…

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

#1 楼

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


评论


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

– dutt
2010-10-11 8:34

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

–阿黛尔·安萨里(Adeel Ansari)
2010-10-11 8:42

common lang总是比编写自己的函数更好,除非在少数情况下您会更好。如果您没有阅读关于大写功能的common lang java doc,那么您不应该自己编写。

– The.Laughing.Man
20年4月30日在22:04

@ The.Laughing.Man并不是每个人都已经将commons-lang作为依赖项,对于希望为单个功能引入新依赖项的人来说,此答案很有用

– Nosrep
20-10-13在0:36

#2 楼

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

评论


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

– Surbhit Rao
18年5月30日在6:12

StringUtils.capitalize(“来自木星的弗雷德”);产生“来自木星的弗雷德”。容易...:D

–udoline
19年5月29日在15:00

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

– Atul Sharma
19-09-18在17:14

#3 楼

字符串首字母大写的简称代码是:
String name  = "stackoverflow"; 
name = name.substring(0,1).toUpperCase() + name.substring(1).toLowerCase();

name的值是"Stackoverflow"

评论


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

–艾伦·斯佩特斯(Ellen Spertus)
15年11月13日在17:40

#4 楼

使用Apache的公共库。将您的大脑从这些东西中解放出来,避免Null Pointer和Index脱离绑定异常
步骤1:
通过将其放入build.gradle依赖项中来导入apache的公共lang库
compile 'org.apache.commons:commons-lang3:3.6'

步骤2:
如果您确定字符串全部为小写字母,或者只需要初始化第一个字母,则直接调用
StringUtils.capitalize(yourString);

如果要确保只有第一个字母是大写字母,就像对enum进行此操作一样,请先调用toLowerCase()并记住,如果输入字符串为null,它将抛出NullPointerException。它是免费的
StringUtils.capitalize(YourEnum.STUFF.name().toLowerCase());
StringUtils.capitalize(yourString.toLowerCase());

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

评论


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

–阿尔瓦罗
18年11月15日在18:38

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

–尤里(Yuriy Chernyshov)
19年7月2日在23:17

@YuriyChernyshov可以肯定的是,我的意思是,大多数情况下,他们不应该为生产代码重新发明轮子

–阿尔瓦罗
19年7月3日在19:43

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

– Atul Sharma
19-09-18在17:19

我决不会出于诸如Java中如何大写String的首字母之类的小目的而去外部库。

–堆栈溢出
20-2-17在18:39

#5 楼

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
19/09/14在11:32

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

–阿米尔·侯赛因·加塞米(Amir Hossein Ghasemi)
19-09-16在7:16



#6 楼

您想做的可能是这样的:

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


#7 楼

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

评论


嗨!您能解释一下如何在我的项目中实现吗?我可以在您的URL中看到任何文件下载链接。谢谢

– GrayFox
17年5月16日在14:10

不建议使用此方法。请使用commons-lang中的StringUtils

–方明
17年10月10日在14:11

#8 楼

下面的解决方案将起作用。

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
18-10-25在8:26

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

–吉吉尔·卡卡达(Jijil Kakkadathu)
18-10-25在8:34

哦。我错过了那件事。 (y)

– Harpreet Sandhu-TheRootCoder
18-10-26在10:39

亲爱的好答案

–杜拉伊·库拉通加(Dulaj Kulathunga)
19年11月28日在17:10

#9 楼

如果您使用SPRING:
import static org.springframework.util.StringUtils.capitalize;
...


    return capitalize(name);

实施: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-

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

#10 楼

使用WordUtils.capitalize(str)

评论


还应该提及这是哪个库。

–自由职业者
18/12/19在7:18

#11 楼

也是最短的:

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


为我工作。

#12 楼

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

    userName = userName.toLowerCase();


然后将首字母大写:

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

评论


我如何得到它,第一行代码是没有用的,因为字符串的其余部分都设置为小写。

–HåvardNygård
16年8月7日在14:11

#13 楼

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


#14 楼

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


#15 楼

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

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


#16 楼

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


#17 楼

它会工作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); 

    }

}


评论


如果仅按“ Enter”会发生什么?如果只输入一个字母会怎样?

– koppor
20年8月2日在20:58

#18 楼

您也可以尝试以下方法:

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


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

#19 楼

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

但是有两种不同的情况:

案例1

如果您要大写的String是人类可读的,那么您也应该指定默认语言环境:

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


情况2

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

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

#20 楼

试试这个方法

该方法的作用是,考虑单词“ hello world”,该方法将其转换为“ Hello World”,将每个单词的开头都大写。

评论


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

–阿曼·马恩(Ameen Maheen)
15年7月20日在6:55

奇迹般有效!

– SoVinceble
17年2月20日在11:06

#21 楼

这只是为了告诉您,您并没有错。这仅是为了说明OP也可以使用charAt()来完成。 ;)

评论


为“没那么错” +1。我希望使用Character.toString(name.charAt(0))而不是“” + name.charAt(0)来显示我真正想要做的事情。

–user85421
10-10-11在9:36

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

–Chrispix
15年6月15日在14:22

#22 楼

这将起作用

char[] array = value.toCharArray();

array[0] = Character.toUpperCase(array[0]);

String result = new String(array);


#23 楼

您可以使用以下代码:

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

}


#24 楼

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

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

#25 楼

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

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

如果输入为LowerCase,然后使用以下命令:

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

#26 楼

使用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。

#27 楼

当前答案不正确,或者使此简单任务过于复杂。经过研究后,我想到了两种方法:

1。字符串的substring()方法

 public static String capitalize(String str) {
    if(str== null || str.isEmpty()) {
        return str;
    }

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


示例:

 System.out.println(capitalize("java")); // Java
System.out.println(capitalize("beTa")); // BeTa
System.out.println(capitalize(null)); // null
 


2。 Apache Commons Lang

Apache Commons Lang库为此提供了StringUtils类:

 System.out.println(StringUtils.capitalize("apache commons")); // Apache commons
System.out.println(StringUtils.capitalize("heLLO")); // HeLLO
System.out.println(StringUtils.uncapitalize(null)); // null
 


不要忘记将以下依赖项添加到您的pom.xml文件中:

 <dependency>
    <groupId>org.apache.commons</groupId>
    <artifactId>commons-lang3</artifactId>
    <version>3.9</version>
</dependency>
 


评论


使用StringUtils.capitalize(“ a”)尝试另一个测试。

– koppor
20年8月2日在20:59

这是正确的-WordUtils.initials(“ AsdfAsadfg Basdf”“);

– Marc Magon
20年8月14日,1:15

#28 楼

看一看ACL WordUtils。 ?

#29 楼

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


#30 楼

您可以使用以下代码:

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