-1

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

  • 输入名称
  • 标题大小写中的格式名称
  • 输入第二个名字
  • 标题大小写中的格式名称
  • 按字母顺序显示它们

我知道 Java Character 类具有方法 isLowerCase()、isUpperCase、toLowerCase() 和 toUpperCase(),您可以使用它们逐个字符地查看字符串。如果第一个字符是小写,则将其转换为大写,对于随后的每个字符,如果该字符是大写,则将其转换为小写。

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

4

6 回答 6

9

在处理字符串操作时,您应该使用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);
}
于 2012-09-29T22:19:08.040 回答
4

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

String name = "jOhN";
name = name.substring(0, 1).toUpperCase() + name.substring(1).toLowerCase(); 
System.out.println(name); // John
于 2012-09-29T22:15:00.650 回答
3

对于仅使用 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() ... 请参阅Comparable vs Comparator 上的这个问题。

于 2012-09-29T22:29:47.400 回答
3

这应该解决它

List<String> nameList = new ArrayList<String>();
    nameList.add(titleCase("john smith"));
    nameList.add(titleCase("tom cruise"));
    nameList.add(titleCase("johnsmith"));
    Collections.sort(nameList);
    for (String name : nameList) {
        System.out.println("name=" + name);
    }

public static String titleCase(String realName) {
    String space = " ";
    String[] names = realName.split(space);
    StringBuilder b = new StringBuilder();
    for (String name : names) {
        if (name == null || name.isEmpty()) {
            b.append(space);
            continue;
        }
        b.append(name.substring(0, 1).toUpperCase())
                .append(name.substring(1).toLowerCase())
                .append(space);
    }
    return b.toString();
}
于 2012-09-29T23:07:58.633 回答
1

String有一个toCharArray返回新分配char[]的字符的方法。请记住,虽然Strings 是不可变的,但可以重新分配数组的元素。

同样,String 有一个构造函数,它接受一个char[]表示新创建的字符的String

所以结合这些,你有一种方法可以从 aString到 a char[],修改char[],然后回到新的String

于 2012-09-29T22:15:27.393 回答
1

这可以通过多种方式实现,其中大部分将归结为需求的细节。

但基本前提是一样的。 String是不可变的(其内容无法更改),因此您需要提取 的字符String,将第一个字符转换为大写并Stringchar数组中重新构造一个新字符。

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

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

这是一个非常简单的例子。

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);
于 2012-09-29T22:43:20.803 回答