我是Java的初学者,试图编写一个程序来将字符串转换为标题大小写。例如,如果String s = "my name is milind"
,则输出应为"My Name Is Milind"
。
import java.util.*;
class TitleCase
{
public static void main(String args[])
{
Scanner in = new Scanner(System.in);
System.out.println("ent");
String s=in.nextLine();
String str ="";
char a ;
for(int i =0;i<s.length()-1;i++)
{
a = s.charAt(i);
if(a==' ')
{
str = str+(Character.toUpperCase(s.charAt(i+1)));
}
else
{
str =str+(Character.toLowerCase(a));
}
}
//for(int i =0; i<s.length();i++)
//{
System.out.println(str);
//}
}
}
答案 0 :(得分:4)
您正在尝试将输入的每个单词都大写。 所以你必须做以下步骤:
示例代码:
public static void main(String args[]){
Scanner in = new Scanner(System.in);
System.out.println("ent");
String s=in.nextLine();
//now your input string is storred inside s.
//next we have to separate the words.
//here i am using the split method (split on each space);
String[] words = s.split(" ");
//next step is to do the capitalizing for each word
//so use a loop to itarate through the array
for(int i = 0; i< words.length; i++){
//we will save the capitalized word in the same place again
//first, geht the character on first position
//(words[i].charAt(0))
//next, convert it to upercase (Character.toUppercase())
//then add the rest of the word (words[i].substring(1))
//and store the output back in the array (words[i] = ...)
words[i] = Character.toUpperCase(words[i].charAt(0)) +
[i].substring(1);
}
//now we have to make a string out of the array, for that we have to
// seprate the words with a space again
//you can do this in the same loop, when you are capitalizing the
// words!
String out = "";
for(int i = 0; i<words.length; i++){
//append each word to out
//and append a space after each word
out += words[i] + " ";
}
//print the result
System.out.println(out);
}
答案 1 :(得分:3)
使用Java 8流:
String titleCase = (new ArrayList<>(Arrays.asList(inputString.toLowerCase().split(" "))))
.stream()
.map(word -> Character.toTitleCase(word.charAt(0)) + word.substring(1))
.collect(Collectors.joining(" "));
答案 2 :(得分:2)
您想要更改字符串每个单词的第一个字母的大小写。
为此,我将按照以下步骤操作:
+
)和String.substring 答案 3 :(得分:2)
问题在于您添加字符的方式。看看你的if条件:
a = s.charAt(i);
if(a==' ')
{
// Here you are adding not the current character, but the NEXT character.
str = str+(Character.toUpperCase(s.charAt(i+1)));
}
else
{
// Here you are adding the current character.
str =str+(Character.toLowerCase(a));
}
由于这种情况,如果您的输入字符串包含空格,您将跳过一个字符,然后重复您已经添加的另一个字符。
此外,您没有遍历整个字符串,因为您的循环条件转到s.length()-1
。将其更改为s.length()
。但是,如果这样做,如果输入字符串以空格结尾,则可能会遇到异常(因为您将尝试在超出范围的索引处检查字符)。
这里是固定代码的样子:
public static void main(String args[])
{
Scanner in = new Scanner(System.in);
System.out.println("ent");
String s=in.nextLine();
String str ="";
char a ;
for(int i =0;i<s.length();i++)
{
a = s.charAt(i);
if(a==' ')
{
str = str+Character.toLowerCase(a)+(Character.toUpperCase(s.charAt(i+1)));
i++; // "skip" the next element since it is now already processed
}
else
{
str =str+(Character.toLowerCase(a));
}
}
System.out.println(str);
}
注意:我只修复了您提供的代码。但是,我不确定它是否按照你想要的方式工作 - 字符串的第一个字符仍然是它开始的任何情况。你的条件只有大写字母前面有一个空格。
答案 4 :(得分:1)
代码高尔夫变化...我挑战任何人使其变得比这简单:
public String titleCase(String str) {
return Arrays
.stream(str.split(" "))
.map(String::toLowerCase)
.map(StringUtils::capitalize)
.collect(Collectors.joining(" "));
}
答案 5 :(得分:0)
顺便说一句:Unicode区分三种情况:小写,大写和标题情况。虽然对于英语没有关系,但是还有其他语言,其中字符的标题大小写与大写版本不匹配。所以你应该使用
Character.toTitleCase(ch)
代替第一个字母的Character.toUpperCase(ch)。
Unicode中有三个字符大小写:upper,lower和title。大多数人都熟悉大写和小写。 Titlecase可区分由多个组件组成的字符,并且在标题中使用时会以不同方式书写,其中单词中的第一个字母传统上是大写的。例如,在字符串&#34; ljepotica&#34;,[2]中,第一个字母是小写字母lj(\ u01C9,扩展拉丁字符集中用于编写克罗地亚有向图的字母)。如果单词出现在书名中,并且你希望每个单词的第一个字母都是大写的,那么正确的过程就是在每个单词的第一个字母上使用toTitleCase,给你&#34; Ljepotica&#34; (使用Lj,即\ u01C8)。如果您错误地使用了UpperCase,您将得到错误的字符串&#34; LJepotica&#34; (使用LJ,即\ u01C7)。
[Java™编程语言,第四版,作者:James Gosling,Ken Arnold,David Holmes(Prentice Hall)。版权所有2006 Sun Microsystems,Inc.,9780321349804]
答案 6 :(得分:0)
import java.util.Scanner;
public class TitleCase {
public static void main(String[] args) {
System.out.println("please enter the string");
Scanner sc1 = new Scanner(System.in);
String str = sc1.nextLine();
//whatever the format entered by user, converting it into lowercase
str = str.toLowerCase();
// converting string to char array for
//performing operation on individual elements
char ch[] = str.toCharArray();
System.out.println("===============");
System.out.println(str);
System.out.println("===============");
//First letter of senetence must be uppercase
System.out.print((char) (ch[0] - 32));
for (int i = 1; i < ch.length; i++) {
if (ch[i] == ' ') {
System.out.print(" " + (char) (ch[i + 1] - 32));
//considering next variable after space
i++;
continue;
}
System.out.print(ch[i]);
}
}
}
答案 7 :(得分:0)
您可以改用lamda-
String titalName = Arrays.stream(names.split(" "))
.map(E -> String.valueOf(E.charAt(0))+E.substring(1))
.reduce(" ", String::concat);
答案 8 :(得分:0)
WordUtils.capitalizeFully()为我工作时就像魅力一样:WordUtils.capitalizeFully(“ i am FINE”)=“我很好”