String nameStr = "george raymond richard martin";
String formattedName = " ", firstName = " ", middleName = " ", lastName = " ", middleInitial = " ";
int index = 0;
if (nameStr.indexOf(" ") == -1) { //for one name case
formattedName = nameStr.substring(0, 1).toUpperCase().substring(1).toLowerCase();
}
if (nameStr.indexOf(" ") != -1) {
String nameParts[] = nameStr.split(" ");
int N = nameParts.length;
if (N == 2) { //if there are just two names
firstName = nameParts[0];
lastName = nameParts[N - 1];
firstName = firstName.substring(0, 1).toUpperCase().substring(1).toLowerCase();
lastName = lastName.substring(0, 1).toUpperCase().substring(1).toLowerCase();
formattedName = lastName + ", " + firstName;
} else { //for any amount of names
for (index = 1; index <= N - 2; index++) {
middleName = nameParts[index];
firstName = nameParts[0];
lastName = nameParts[N - 1];
middleInitial = middleName.substring(0, 1).toUpperCase() + ".";
formattedName = lastName + ", " + firstName + middleInitial;
}
}
}
System.out.println(formattedName);
これは私が今持っているものです。適切なトラックには何も印刷されていません。 1ワードの場合は印刷されず、2ワードの場合はカンマが出力されます。ミドルネームの任意の量の大文字小文字は、3つの単語に対してのみ機能し、複数のミドルネームがある場合は、ミドルネームを最後のミドルネームに切り詰めます。 問題が何であるか分かりません。私はそれを見るために他の人が必要なように感じます。感謝:)私はLast、First M.に名前をフォーマットするJavaメソッドを記述しようとしています...中間名の任意の数の場合
ピカソのフルネームでそれをテストすることを忘れないでください:あなたはありません持っている場合はパブロ・ディエゴ・ホセ・フランシスコ・デ・パウラフアンNepomucenoマリア・デ・ロス・レメディオスシプリアーノ・デ・ラ・Santísimaトリニダード・ルイスYピカソ –
問題が何であるかを考えれば、投稿する前にさらにデバッグする必要があります。サイドコメントとして、正規表現を使用するとこれははるかに簡単になります。 – 4castle
'.substring(0,1).toUpperCase()。substring(1)' '1'という部分文字列のインデックス' 1'の後の部分文字列は、常に空文字列になります。 – 4castle