511

我正在使用Java获取字符串用户的输入。我正在尝试将此输入的第一个字母大写。

我试过这个:

字符串名称;BufferedReader br=新的InputStreamReader(System.in);字符串s1=name.charAt(0).toUppercase());System.out.println(s1+name.substring(1));

导致这些编译器错误:

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

  • 无法对基元类型char调用toUppercase()

4
  • 2
    @蓬图斯——我不同意。对于输入“abcd”,OP需要输出“abcd”。这似乎很清楚,尽管这个问题本可以更好。
    – 科比
    评论 2010年10月11日8:26
  • stackoverflow.com/questions/1892765/… 评论 2010年10月11日9:06
  • 字符是Java中的基本数据类型。不能使用点(.)运算符取消引用基元数据类型。您必须按name.substring(0,1)对第一个字符进行子串; 评论 2018年12月18日5:00
  • 1
    警告:突厥语字母中为小写字符根据单词的意思,有两个不同的大写字母。请参见en.wikipedia.org/wiki/Dotted_and_dotless_I(英文)
    – 严峻的
    评论 2021年1月6日5:55

59个答案59

重置为默认值
572
字符串str=“java”;字符串帽=str.substring(0,1).toUpperCase()+str.substrang(1);//cap=“Java”

以您为例:

公共静态void main(String[]args)引发IOException{BufferedReader br=新的BufferedReader(新的InputStreamReader(System.in));//实际使用阅读器字符串名称=br.readLine();//不要将String对象与Character对象弄错字符串s1=name.substring(0,1).toUpperCase();字符串名称大写=s1+名称.substring(1);System.out.println(名称大写);}
7
  • 2
    我认为str.length()后面需要-1,否则会超出范围。
    – 达特
    评论 2010年10月11日8:34
  • @达特:不,实际上,那也很好。但雷金的修改使它变得完美 评论 2010年10月11日8:42
  • commons-lang总是比编写自己的函数好,除非在极少数情况下您更清楚。如果您没有阅读关于大写函数的commons lang java文档,那么您不应该自己编写。 评论 2020年4月30日22:04
  • @“。”。笑。不是每个人都已经将commons-lang作为依赖项,这个答案对于那些只想为单个函数引入新依赖项的人来说很有用 评论 2020年10月13日0:36
  • 嗨,请注意,这个答案可能会产生错误的结果,因为str.substring(0,1)可能返回无效的unicode字符串-stackoverflow.com/questions/70178612/… 评论 2022年5月14日16:37
352

StringUtils.大写(..)公共语言

4
  • 我使用的是WordUtils,它也有相同的功能,但它将句子中所有单词的首字母大写。 评论 2018年5月30日6:12
  • 7
    StringUtils。大写(“fred from jupiter”);生产“来自木星的弗雷德”。简单……:D类
    – 乌多林
    评论 2019年5月29日15:00
  • 6
    WordUtils.capitalieFully()为我带来了巨大的魅力:WordUils.capitaleFull(“我很好”)=“我很不错”
    – 阿图KS
    评论 2019年9月18日17:14
  • 4
    请注意,当您使用此选项时,字符串实际上是小写的。我在一个值为“ATTACHMENT”的枚举上尝试了它,并希望它是“ATTACHMENT”。当然,它不起作用,因为它大写了第一个字母“A”,这已经是大写;)。因此,首先将字符串转换为小写,然后使用此函数。工作起来很有魅力。 评论 2021年1月15日16:20
151

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

String name=“stackoverflow”;name=name.substring(0,1).toUpperCase()+name.substrang(1).toLowerCase(;

的价值名称“堆栈溢出”

2
  • 16
    我喜欢这个解决方案,因为它可以确保字符串的其余部分是小写的。这正是我从ALL_CAPS枚举名称转换时所需要的。 评论 2015年11月13日17:40
  • 你的解决方案有问题。有一句话:“我爱奥巴马”,所以它会变成“我爱他”,这有点令人困惑。可能.to下壳体()应该是可选的,带有标志参数,如公共静态字符串大写(字符串字符串,boolean lowerTheRest[=false]){。。。 评论 2022年8月11日9:24
103

使用Apache的公共库。从这些东西中解放你的大脑,避免空指针和索引越界异常

第1步:

通过将其放入,导入apache的公共语言库建筑梯度依赖关系

实现“org.apache.commons:commons-lang3:3.6”

第二步:

如果您确定您的字符串都是小写,或者您只需要初始化第一个字母,那么直接调用

StringUtils.capitalie(yourString);

如果你想确保只有第一个字母大写,比如对枚举,呼叫至下壳体()首先,记住它会抛出空指针异常如果输入字符串为空。

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

以下是apache提供的更多示例。它没有例外

StringUtils.capitalie(null)=空StringUtils.capitalie(“”)=“”StringUtils.capitalie(“cat”)=“cat”StringUtils.capitalie(“cAt”)=“cAt”StringUtils.capitalie(“'cat'”)=“'cat”

注:

文字实用程序也包含在此库中,但已弃用。拜托不要使用它。

1
  • WordUtils.capitalieFully()为我带来了巨大的魅力:WordUils.capitaleFull(“我很好”)=“我很不错”
    – 阿图KS
    评论 2019年9月18日17:19
48

如果您使用春天:

导入静态org.springframework.util。StringUtils.capitalize公司;...返回大写(名称);

实施: org/springframework/util/StringUtils.java#L535-L555

裁判: javadoc-api/org/springframework/util/StringUtils.html#大写


注:如果您已经有了Apache Common Lang依赖项,那么可以考虑像其他答案所建议的那样使用它们的StringUtils.capitalize。

45

Java语言:

简单地说,是一个用于大写每个字符串的helper方法。

public static字符串大写(String str){如果(str==null||str.length()<=1)返回str;return str.substring(0,1).toUpperCase()+str.substrang(1);}

之后只需打电话str=大写(str)


科特林:

字符串大写()
2
  • 1
    需要考虑空字符串,否则将导致索引越界错误 评论 2022年6月17日9:21
  • 1
    对于长度为1的字符串,请不要执行任何操作。缺陷。 评论 2022年11月11日11:29
24

你想做的可能是:

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

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

此外,您创建了一个输入流读取器,但从未读取任何行。因此名称将永远是无效的.

这应该有效:

BufferedReader br=新的InputstreamReader(System.in);字符串名称=br.readLine();字符串s1=name.substring(0,1).toUpperCase()+name.substrang(1);
0
19

WordUtils.capitalie(java.lang.String)Apache公共空间.

2
  • 你好!你能解释一下如何在我的项目中实现这一点吗?我可以在你的URL中看到任何文件下载链接。谢谢
    – 灰狐
    评论 2017年5月16日14:10
  • 此方法已弃用。请使用commons-lang中的StringUtils
    – 方明
    评论 2017年11月10日14:11
16

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

字符串A=“stackOverflow”;字符串ACaps=A.到UpperCase().charAt(0)+A.子字符串(1,A.长度());//将打印StackOverflow

不能对基元字符使用toUpperCase(),但可以先将整个字符串设为Uppercase,然后取第一个字符,然后附加到子字符串,如上所示。

0
14

使用此实用方法将每个单词的第一个字母大写。

字符串大写AllFirstLetters(字符串名称){char[]数组=name.toLowerCase().toCharArray();数组[0]=Character.toUpperCase(数组[0]);for(int i=1;i<array.length;i++){if(字符.isWhitespace(数组[i-1])){array[i]=Character.toUpperCase(array[i]);}}return new String(数组);}
2
  • 逻辑上有一个错误。函数的第一行应该是char[]数组=name.toLowerCase().toCharArray();。否则,该函数仅在输入全小写字符串时有效。 评论 2022年8月29日20:59
  • 1
    @JonathanBenn谢谢你指出这一点,我现在已经更新了。
    – 梅芙
    评论 4月24日11:08
12

使用WordUtils.大写(str).

1
  • 1
    还应该提到这是哪个图书馆。
    – 井架
    评论 2018年12月19日7:18
11

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

userName=userName.toLowerCase();

然后将第一个字母大写:

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

子字符串只是得到一个较大字符串的一部分,然后我们将它们组合在一起。

1
  • 7
    我是如何得到它的,第一行代码是没有用的,因为字符串的其余部分都设置为小写。 评论 2016年8月7日14:11
9
字符串str1=“你好”;str1.substring(0,1).toUpperCase()+str1.substring(1);
8

最短:

字符串消息=“我的消息”;message=Character.toUpperCase(message.charAt(0))+message.substring(1);System.out.println(message)//将输出:我的消息

为我工作。

2
  • 1
    我有预感字符位于(0)提供了比子字符串(0,1). 评论 2023年2月12日1:57
  • @user16217248是的,它的可读性也更高,子串使用字节数组执行一些字符串操作(复制)以及索引检查,同时字符位于将直接访问目标(bytesArray[0])。但我相信,如果您执行多个子串操作,这将是显而易见的。 评论 2023年2月12日2:37
8

这是我关于所有可能选项的主题的详细文章Android中字符串的首字母大写

Java中字符串首字母大写的方法

public static字符串大写字符串(String str){字符串retStr=str;尝试{//如果字符串为null,我们可以面临索引越界异常retStr=str.substring(0,1).toUpperCase()+str.substrang(1);}catch(异常e){}return retStr;}

KOTLIN中字符串首字母大写的方法

fun capitalizeString(str:String):字符串{var retStr=字符串尝试{//如果字符串为null,我们可以面临索引越界异常retStr=str.substring(0,1).toUpperCase()+str.substrang(1)}catch(e:异常){}返回retStr}
7

它将工作101%

公共级UpperCase{公共静态void main(String[]args){字符串名称;System.out.print(“输入:”);扫描仪扫描=新扫描仪(System.in);名称=scan.next();字符串upperCase=name.substring(0,1).toUpperCase()+name.substrang(1);System.out.println(“OUTPUT:”+大写);}}
2
  • 4
    如果只按“Enter”会发生什么?如果只输入一个字母会怎么样?
    – 科珀
    评论 2020年8月2日20:58
  • 7
    @koppor那么它将工作0%
    – 约翰·k
    评论 2021年7月16日20:10
6

在Android Studio中

将此依赖项添加到您的build.gradle(模块:app)

依赖关系{...编译“org.apache.commons:commons-lang3:3.1”...}

现在您可以使用

String String=“String WITH ALL CAPPS AND SPACES”;string=string.toLowerCase();//如果有大写字母,请全部小写someTextView.setText(WordUtils.capitalie(字符串));
0
6

关于WordUtils.capitaleFully()?

导入org.apache.commons.lang3.text。WordUtils;公共类主{公共静态void main(String[]args){final字符串str1=“HELLO WORLD”;System.out.println(大写首字母(str1));//输出:Hello Worldfinal String str2=“Hello WORLD”;System.out.println(大写首字母(str2));//输出:Hello Worldfinal String str3=“hello world”;System.out.println(大写首字母(str3));//输出:Hello Worldfinal String str4=“helLLo wORld”;System.out.println(大写首字母(str4));//输出:Hello World}private static字符串大写FirstLetter(String str){return WordUtils.capitaleFully(str);}}
6

简单的解决方案!不需要任何外部库,它可以处理空字符串或单字母字符串。

私有字符串大写FirstLetter(@NonNull String str){return str.length()==0?字符串:str.length()==1?str.到UpperCase():str.substring(0,1).toUpperCase()+str.substrang(1).to LowerCase(;}
1
  • 这是正确的答案。当给定一个字母时,例如“b”,由于ArrayOutOfBoundsException,大多数其他答案都会失败。遗憾的是,这个解决方案没有按照StackOverflow准则解释任何代码。当然,对于熟悉Java的人来说,解决方案是显而易见的,但对于对Java相对陌生的人来说不一定如此。
    – 一个
    评论 2021年5月30日18:04
6

您也可以尝试以下操作:

字符串s1=br.readLine();char[]chars=s1.toCharArray();chars[0]=字符.toUpperCase(chars[0]);s1=新字符串(字符);System.out.println(s1);

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

0
5

你可以使用子字符串()这样做。

但有两种不同的情况:

案例1

如果字符串大写是为了让人可读,还应该指定默认的语言环境:

字符串firstLetterCapitalized=myString.substring(0,1).toUpperCase(Locale.getDefault())+myString.substring;

案例2

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

注意:您不必指定区域设置.getDefault()对于至下壳体(),因为这是自动完成的。

4

如果Input为UpperCase,则使用以下内容:

str.substring(0,1).to-UpperCase()+str.substring(1).to-LowerCase();

如果Input为LowerCase,则使用以下内容:

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

4

现有答案是

  • 不正确:他们认为烧焦是一个单独的字符(代码点),而它是一个UTF-16单词,可以是代理项对的一半,或者
  • 使用本身不错但需要向项目添加依赖项的库,或者
  • 使用Java 8流这是完全有效的,但并不总是可能的。

让我们看看代理字符(每个这样的字符都由两个UTF-16单词组成-Java烧焦s) 可以有大小写变体:

IntStream范围关闭(0x01_0000,0x10_FFFF).filter(ch->字符.toUpperCase(ch)!=字符.toLowerCase(ch)).forEach(ch->System.out.print(新字符串(newint[]{ch},0,1));

对你来说,它们中的许多可能看起来像“豆腐”(□),但它们大多是罕见字体的有效字符,一些字体支持它们。

例如,让我们看看Deseret小写字母Long I(𐐨),U+10428,“\uD801\uDC28”:

System.out.println(“U+”+Integer.toHexString(“\uD801\uDC28”.codePointAt(0))); // U+10428号System.out.println(“U+”+Integer.toHexString(字符.toTitleCase(“\uD801\uDC28”.codePointAt(0)))); // U+10400-好!大写字符是另一个代码点System.out.println(“U+”+Integer.toHexString(新字符串(新字符[]{字符.toTitleCase(“\uD801\uDC28”.charAt(0)),“\uD801\uDC28”.charAt(1)}).codePointAt(0));//U+10428-哎呀!-无法将未成对的代理项大写

因此,即使在以下情况下,代码点也可以大写烧焦不能。考虑到这一点,让我们编写一个正确的(与Java 1.5兼容!)大写字母:

@合同(“null->null”)公共静态CharSequence大写(CharSequenceinput){int长度;if(input==null||(length=input.length())==0)返回输入;return new StringBuilder(长度).appendCodePoint(Character.toTitleCase(Character.codePointAt(input,0)).append(输入,字符.offsetByCodePoints(输入,0,1),长度);}

并检查其是否工作:

公共静态void main(String[]args){//ASCII码System.out.println(大写(“whatever”));//w->w//UTF-16,无替代品System.out.println(大写);//ч -> Ч//带代理项对的UTF-16System.out.println(大写(“\uD801\uDC28”);//𐐨 -> 𐐀}

另请参见:

2
  • 至少是一个关于如何正确处理Unicode的好例子。谢谢您。 评论 2022年5月14日16:50
  • ……但仍在触及相关问题的表面。案例映射是对区域设置敏感操作,对于不同的区域设置可以有不同的结果。所以我们必须知道手术是为了什么。它是关于处理代码标识符(例如,当将Bean属性名映射到getter方法时)并且需要一个固定的区域设置来获得可重复的结果,还是关于用户字符串需要用户的区域设置?在后一种情况下,我们需要知道默认的语言环境是否真的是用户的语言环境(就像桌面应用程序中一样),或者我们是在服务器上,需要客户端的语言环境…
    – 霍尔格
    评论 3月25日13:47
4

目前的答案要么不正确,要么过于复杂,这项简单的任务。做了一些研究后,以下是两种方法我想出了:

1.字符串子字符串()方法

public static字符串大写(String str){if(str==null||str.isEmpty()){返回str;}return str.substring(0,1).toUpperCase()+str.substrang(1);}

示例:

System.out.println(大写(“java”));//Java语言System.out.println(大写(“beTa”));//贝塔System.out.println(大写(空));//无效的

2.Apache Commons语言

Apache Commons Lang库提供字符串实用程序用于此目的的类:

System.out.println(StringUtils.capitalie(“apachecommons”));//Apache通用System.out.println(StringUtils.capitalie(“helLLO”));//你好System.out.println(StringUtils.uncapitalize(null));//无效的

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

<依赖性><groupId>org.apache.commons</groupId><artifactId>commons-lang3</artifactId><版本>3.9</版本></依赖性>
  • 使用尝试另一个测试StringUtils.capitalize(“a”).
    – 科珀
    评论 2020年8月2日20:59
  • 这是正确的——WordUtils.initials(“AsdfAsadfg Basdf”); 评论 2020年8月14日1:15
  • 用StringUtils.capitalie(“b”)Tee-hee尝试另一个测试!!
    – 一个
    评论 2021年5月30日17:57
4

试试这个

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

私有字符串大写字母(字符串字){String[]words=word.split(“”);StringBuilder sb=new StringBuilders();if(单词[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(Character.toUpperCase(words[i].charAt(0))+words[i].subSequence(1,words[i-].length()).toString().toLowerCase());}}将某人返回字符串();}
2
  • 但这段代码似乎很容易理解,所有方法的名称也很容易理解。但感谢您的评论,我们将从下次开始努力使其更加完美,我有些时候太懒了:-)。 评论 2015年7月20日6:55
  • 很有魅力! 评论 2017年2月20日11:06

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

BufferedReader br=新的InputstreamReader(System.in);//假设名称不为空字符串名称=br.readLine();//不再有错误提示您无法将字符转换为字符串字符串s1=(“”+name.charAt(0)).toUppercase());//或者,就像卡洛斯喜欢的那样。请参阅此帖子的评论。String s1=Character.toString(name.charAt(0)).toUppercase());System.out.println(s1+name.substring(1));

注: 这根本不是最好的方法。这只是为了向OP表明可以使用字符()还有。;)

2
  • 1
    +1表示“没有那么错”。我会的更喜欢 Character.toString(name.charAt(0))而不是“”+name.charAt(0)展示我真正想做的事。 评论 2010年10月11日9:36
  • 无空长度检查。。长度可以为零。 评论 2015年6月15日14:22

这会奏效的

char[]数组=value.toCharArray();数组[0]=Character.toUpperCase(数组[0]);字符串结果=新字符串(数组);

您可以使用以下代码:

公共静态void main(String[]args){大写首字母(“java”);大写首字母(“java开发人员”);}public static void capitalizeFirstLetter(字符串文本){StringBuilder str=新StringBuilder();String[]标记=text.split(“\\s”);//可以是空格、逗号或连字符for(字符串标记:标记){str.append(Character.toUpperCase(token.charAt(0))).append(token.substring(1)).ampend(“”);}str.toString().trim();//修剪尾部空间System.out.println(str);}

使用commons.lang.String实用程序最佳答案是:

public static字符串大写(String str){int strLen;return str!=返回字符串null&&(strLen=str.length())!=0 ? (new StringBuffer(strLen)).append(Character.toTitleCase(str.charAt(0))).ampend(str.substring(1)).toString():str;}

我觉得它很棒,因为它用StringBuffer包装字符串。您可以根据需要操作StringBuffer,尽管使用的是相同的实例。

2

查看ACL WordUtils。

WordUtils.capitalie(“your string”)==“your string”

如何大写字符串中每个单词的第一个字母?

不是你想要的答案吗?浏览标记的其他问题问你自己的问题.