2016-09-16 12 views
-1
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メソッドを記述しようとしています...中間名の任意の数の場合

+3

ピカソのフルネームでそれをテストすることを忘れないでください:あなたはありません持っている場合はパブロ・ディエゴ・ホセ・フランシスコ・デ・パウラフアンNepomucenoマリア・デ・ロス・レメディオスシプリアーノ・デ・ラ・Santísimaトリニダード・ルイスYピカソ –

+0

問題が何であるかを考えれば、投稿する前にさらにデバッグする必要があります。サイドコメントとして、正規表現を使用するとこれははるかに簡単になります。 – 4castle

+1

'.substring(0,1).toUpperCase()。substring(1)' '1'という部分文字列のインデックス' 1'の後の部分文字列は、常に空文字列になります。 – 4castle

答えて

0

formattedName=nameStr.substring(0,1).toUpperCase().substring(1).toLowerCase()

だから、最初のあなたは、文字列nameStrからの最初の文字を取り、大文字に変換します。あなたが次にすること(substring(1))は、あなたが取ったその一文字の部分文字列であり、以前の文字列全体ではありません。最初にその1文字をupperCaseに変換してから、別の行に元の文字列の残りの部分を新しい文字列に追加する必要があります。このような何か:

formattedName = nameStr.substring(0,1).toUpperCase(); 

formattedName += nameStr.substring(1).toLowerCase(); 
2

私はあなたがString#split(String)方法で必要なものだと思います。完全な名前がスペースで区切られた単語の文字列である場合、splitは問題の迅速な処理を行います。

「ジョージ・レイモンド・リチャード・マーティン」を「ジョージ・R・マーティン」としたいと思っています。さもなければ、あなたは本当にスペックが何であるか教えてくれませんでしたが、これがあなたがそれを達成する方法です。

String toShortenedName(String fullName) { 
    assert(fullName != null); // :P 

    // Split the fullName where there are 1-or-more whitespaces. 
    String[] nameParts = fullName.trim().split("\\s+"); 
    // We'll be building our return value with this. 
    StringBuilder nameBuilder = new StringBuilder(); 

    for (int i = 0; i < nameParts.length; i++) { 
     if (i > 0) { 
      // Not the first iteration; add a space to what came before. 
      nameBuilder.append(' '); 
     } 

     String part = nameParts[i]; 
     if (i == 0 || i == nameParts.length - 1) { 
      // first or last name 
      nameBuilder.append(part); 
     } else { 
      char middleInitial = part.charAt(0); 
      nameBuilder.append(String.format("%c.", middleInitial)); 
     } 
    } 

    return nameBuilder.toString(); 
} 
+0

はい;私はそれらのdownvotesに値する。たくさんのコンパイル時エラー。しかし、今でもそれらを修正! – nasukkin

+0

何かあれば、OPは "Last、First M. ..."というタイトルで "Martin、George R. R." – Andreas

0

これはわずかに更新あなたのコードです:私は私の解決策を送信

// TODO Auto-generated method stub 
    //String nameStr = "george raymond richard martin"; 
    String nameStr = "Pablo Diego José Francisco de Paula Juan Nepomuceno María de los Remedios Cipriano de la Santísima Trinidad Ruiz y Picasso"; 


    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; 

     firstName = nameParts[0]; 

     lastName = nameParts[N-1]; 



      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]; 

          middleInitial = middleInitial + middleName.substring(0, 1).toUpperCase()+ "."; 





        } 
       } 
      } 

      formattedName = lastName + ", " + firstName + middleInitial; 
      System.out.println(formattedName); 
0

。多分あなたを助けるかもしれません。 出力:マーティン、ジョージ・RR

String nameStr = "george raymond richard martin"; 
    String firstName = " ", lastName = " ", middleInitial = " "; 
    StringBuilder formattedName=new StringBuilder(); 
    StringBuilder nb=new StringBuilder(); 


    String[] splitNames=(nameStr.split("\\s+")); 

    for(int i=0;i<splitNames.length;i++){ 
     if(i>0 && i<splitNames.length-1) { 
       splitNames[i]=splitNames[i].substring(0,1).toUpperCase()+"."; 
       nb.append(splitNames[i]); 
     }else{ 

      splitNames[i]=splitNames[i].substring(0,1).toUpperCase()+splitNames[i].substring(1).toLowerCase(); 
     } 

    } 
    firstName=splitNames[0]; 
    lastName=splitNames[splitNames.length-1]; 

    formattedName.append(lastName); 
    formattedName.append(", "); 
    formattedName.append(firstName+" "); 
    formattedName.append(nb); 



    System.out.println(formattedName.toString()); 
関連する問題