-1

だから私はJavaコードを書く必要があります:

  • 名前を入力
  • タイトルケースのフォーマット名
  • 姓を入力
  • タイトルケースのフォーマット名
  • アルファベット順に表示する

Java Character クラスには isLowerCase()、isUpperCase、toLowerCase()、toUpperCase() というメソッドがあり、文字列を 1 文字ずつ確認する際に使用できます。最初の文字が小文字の場合は大文字に変換し、後続の各文字が大文字の場合は小文字に変換します。

問題は、各文字をどのようにチェックするかです。どのような変数と文字列を含める必要がありますか? 助けていただけますか?

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

これで修正されるはずです

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 に答える
3

String クラスのみを使用して 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" のように、すべての名前が適切に大文字になっていることを確認したいようです。この場合、文字列入力を走査して、文字列の最初の文字と文字を確認する必要があります。スペースの後は大文字です。

List をアルファベット順に並べ替えるには、入力されたすべての名前を ArrayList または他の Collections オブジェクトに格納し、Comparator を実装する Comparator を作成し、それを Collections.sort() に渡すことをお勧めします... Comparable vs Comparator に関するこの質問を参照してください。

于 2012-09-29T22:29:47.400 に答える
1

これはさまざまな方法で実現できますが、そのほとんどは要件の詳細に帰着します。

しかし、基本的な前提は同じです。 Stringは不変です (内容は変更できません)。そのため、 の文字を抽出しString、最初の文字を大文字に変換し、配列Stringから新しい を再構成する必要があります。char

すでに指摘したように、これは比較的単純です。

もう 1 つ必要なことがあるのは、複数の名前 (名、姓) を 1 回のパスで処理することです。繰り返しますが、これは比較的単純です。難しい部分は、複数の条件で文字列を分割する必要がある場合で、正規表現に頼る必要があります。

これは非常に簡単な例です。

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 に答える
1

String新しく割り当てられた文字toCharArrayを返すメソッドがあります。s はimmutablechar[]ですが、配列の要素は再割り当てできることに注意してください。String

同様に、新しく作成された の文字を表すを受け取るString コンストラクタがあります。char[]String

したがって、これらを組み合わせると、 から に移動し、 を変更して、新しい に戻る 1 つの方法がStringchar[]られchar[]ますString

于 2012-09-29T22:15:27.393 に答える