所以我必须编写一个Java代码:
输入名称
标题框中的格式名
输入第二个名称
标题框中的格式名
按字母顺序显示
我知道Java字符类具有ISLoWrasCasee()、IsUpPult、ToWoReCasee()和ToupPulcAe()的方法,它们可以用于查看字符串、逐字符。如果第一个字符是小写,则将其转换为大写,对于每个后续字符,如果字符是大写,则将其转换为小写。
问题是我如何检查每封信?应该包含什么类型的变量和字符串?你能帮忙吗?
homework标记已被弃用(您不应该再使用它)。我把它从你的问题中删去了。(如果你觉得让人们知道这一点很重要,你可以在文中提及。)出于不赞成的原因,请参阅meta.stackexchange.com/questions/147100/…
在处理字符串操作时,应该使用StringBuilder。这样,最终创建的对象数量就更少了。
StringBuilder s1 = new StringBuilder("rohit");
StringBuilder s2 = new StringBuilder("jain");
s1.replace(0, s1.length(), s1.toString().toLowerCase());
s2.replace(0, s2.length(), s2.toString().toLowerCase());
s1.setCharAt(0, Character.toTitleCase(s1.charAt(0)));
s2.setCharAt(0, Character.toTitleCase(s2.charAt(0)));
if (s1.toString().compareTo(s2.toString()) >= 0) {
System.out.println(s2 +"" + s1);
} else {
System.out.println(s1 +"" + s2);
}
实际上,除非需要线程安全,否则应该使用StringBuilder—StringBuffer是同步的。
是的,我知道…只是匆匆用了一下……但它仍然可以工作……
@保罗·贝洛拉编辑
酷+1提到一个最佳的方式。
@ PaulBellora。谢谢)
+我喜欢江户的想法。
+1个好的解决方案-别忘了你还需要强制其他字符小写!
@ DNA。是的,当然…将更新解决方案..
如何将其他字符强制为小写?也可以在没有StringBuilder的情况下完成吗?因为我在一个基本的Java类中,这是我们第一次使用字符串!
@穆罕默德……我添加了那个代码……查看我更新的代码..那条s1.replace和s2.replace线。
@Rohitjain谢谢,我真的很感激
@我做了,还有一个问题。必须输入名称,这样才能做到这一点?我是指输入姓名的用户,姓名未知
您可以要求用户输入名称。使用scanner类。点击链接了解更多信息。另外,你可以通过how to take user input through Scanner在谷歌上搜索。
对于完整的国际标题大小写,您应该将第一个字符改为标题大小写,而不是大写。例如?性格变了?大写,但是?在标题中。
@尼尔。是的,但这里没有考虑标题,因为OP还是初学者。所以,也许他会逐渐学会……但你是对的……因此,将更新我的代码,以供将来参考。谢谢)
@madprogrammer下面的答案是一个更好的选择,没有2个不同的输入。
它完全满足了我的要求。谢谢你(我的要求是把字符串转换成句子大小写)。
您可以将第一个字符转换为大写,然后将字符串的其余部分转换为小写:
String name ="jOhN";
name = name.substring(0, 1).toUpperCase() + name.substring(1).toLowerCase();
System.out.println(name); // John
"约翰·史密斯"怎么样?
@MadProgrammer:我假设op从输入(第一个和最后一个)中读取一个名字,但这只是split通过\s对字符串进行赋值并重复这个过程的问题。
是的,我只是搅拌锅。我读这个词的意思是一个名字(可能包含空格甚至连字符),但我也可能是错的。
+1.简洁大方!
在全名的情况下,在空间上使用记号赋予器,在while循环中使用相同的逻辑,在新名称中使用stringbuilder变量。
分隔符可以按此处所述进行考虑stackoverflow.com/questions/1086123/…
这应该能解决问题4
对于仅使用string类遍历字符串,请遍历字符串中的每个字符。
String s ="tester";
int size = s.length(); // length() is the number of characters in the string
for( int i = 0; i < size; i++) {
// s.charAt(i) gets the character at the ith code point.
}
这个问题回答了如何"更改"一个字符串——你不能这样做。不过,StringBuilder类为在特定索引处编辑字符提供了方便的方法。
看起来您希望确保所有名称都正确大写,例如:"martin ye"->"martin ye",在这种情况下,您需要遍历字符串输入以确保字符串的第一个字符和空格后的字符都大写。
为了按字母顺序排列列表,我建议将所有输入的名称存储到ArrayList或其他一些Collections对象中,创建实现Comparator的Comparator,并将其传递给Collections.Sort()。在可比vs比较器上看到这个问题。
这可以通过多种方式实现,其中大多数都可以归结为需求的细节。
但基本前提是相同的。String是不可变的(其内容不可更改),因此您需要先提取String的字符,将第一个字符转换为大写,然后从char数组中重新构造一个新的String。
正如已经指出的,这是相对简单的。
您可能需要做的另一件事是在一次传递中处理多个名称(第一个、最后一个)。同样,这是相对简单的。困难的部分是,当您可能需要在多个条件下拆分字符串时,则需要使用正则表达式。
下面是一个非常简单的例子。
String name ="this is a test";
String[] parts = name.split("");
StringBuilder sb = new StringBuilder(64);
for (String part : parts) {
char[] chars = part.toLowerCase().toCharArray();
chars[0] = Character.toUpperCase(chars[0]);
sb.append(new String(chars)).append("");
}
name = sb.toString().trim();
System.out.println(name);
String有一个方法toCharArray返回新分配的char[]字符。记住,虽然String是不可变的,但数组元素可以重新分配。
类似地,String有一个构造函数,它接受一个char[]来表示新创建的String的字符。
因此,结合这些,您有一种方法可以从String到char[],修改char[],然后返回到新的String。