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()
#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"));
}
评论
@Pontus-我不同意。对于输入“ abcd”,OP希望输出“ Abcd”。似乎很清楚,尽管问题本来可以更好。stackoverflow.com/questions/1892765/…
character是Java中的原始数据类型。您不能使用dot(。)运算符取消引用原始数据类型。您必须按名称对第一个字符进行字符串化。substring(0,1);