关于字符串:标题案例中的格式名称请求Java帮助吗?

Format name in title case Java help please?

所以我必须编写一个Java代码:

  • 输入名称
  • 标题框中的格式名
  • 输入第二个名称
  • 标题框中的格式名
  • 按字母顺序显示

我知道Java字符类具有ISLoWrasCasee()、IsUpPult、ToWoReCasee()和ToupPulcAe()的方法,它们可以用于查看字符串、逐字符。如果第一个字符是小写,则将其转换为大写,对于每个后续字符,如果字符是大写,则将其转换为小写。

问题是我如何检查每封信?应该包含什么类型的变量和字符串?你能帮忙吗?


在处理字符串操作时,应该使用StringBuilder。这样,最终创建的对象数量就更少了。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
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);
}


您可以将第一个字符转换为大写,然后将字符串的其余部分转换为小写:

1
2
3
String name ="jOhN";
name = name.substring(0, 1).toUpperCase() + name.substring(1).toLowerCase();
System.out.println(name); // John


这应该能解决问题

4


对于仅使用string类遍历字符串,请遍历字符串中的每个字符。

1
2
3
4
5
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

正如已经指出的,这是相对简单的。

您可能需要做的另一件事是在一次传递中处理多个名称(第一个、最后一个)。同样,这是相对简单的。困难的部分是,当您可能需要在多个条件下拆分字符串时,则需要使用正则表达式。

下面是一个非常简单的例子。

1
2
3
4
5
6
7
8
9
10
11
12
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的字符。

因此,结合这些,您有一种方法可以从Stringchar[],修改char[],然后返回到新的String