2011-07-15 15 views
0

firstName、middleName、lastNameを解析するプログラムを作成しました。ここにプログラムと出力があります。このプログラムは間違いなく改善され、面倒な醜いコードを減らし、より良いコードに置き換えるためにいくつかの入力が必要です。任意の提案や例?文字列fullname Javaを分割

public class Test { 

    public static void main(String[] args) { 

    String fullName = "John King IV. Cena"; 
    String[] tokens = fullName.split(" "); 
    String firstName = ""; 
    String middleName = ""; 
    String lastName = ""; 
    if(tokens.length > 0) { 
     firstName = tokens[0]; 
     middleName = tokens.length > 2 ? getMiddleName(tokens) : ""; 
     lastName = tokens[tokens.length -1]; 
    } 
    System.out.println(firstName); 
    System.out.println(middleName); 
    System.out.println(lastName); 
    } 

    public static String getMiddleName(String[] middleName){ 
     StringBuilder builder = new StringBuilder(); 
     for (int i = 1; i < middleName.length-1; i++) { 
      builder.append(middleName[i] + " "); 
     } 

     return builder.toString(); 
    } 
} 

ジョン キングIV。 Cena

+2

これがすべきのように最初の名前だけを入力します実際にcodereview.stackexchange.comにいる。 – Perception

+0

これはcodereview.stackexchange.comに属していると思います – trutheality

答えて

1

このコードは同じですが、中間の名前に後続のスペースはありません。これは、です。いくつかの可能なクリーンな実装です。みんなが言ったように

public class Test { 

    public static void main(String[] args) { 

     String name = "John King IV. Cena"; 

     int start = name.indexOf(' '); 
     int end = name.lastIndexOf(' '); 

     String firstName = ""; 
     String middleName = ""; 
     String lastName = ""; 

     if (start >= 0) { 
      firstName = name.substring(0, start); 
      if (end > start) 
       middleName = name.substring(start + 1, end); 
      lastName = name.substring(end + 1, name.length()); 
     }  

     System.out.println(firstName); 
     System.out.println(middleName); 
     System.out.println(lastName); 
    } 
} 

、次回は、人の姓が複数の単語を持っている場合ヴァン・ヘルシングのように、失敗しますhttps://codereview.stackexchange.com/

2

アルゴリズムに直接アクセスしてください。 バンは、ミドルネームではなく姓の一部です。明らかに、ミドルネームとラストネームとを明確に区別するアルゴリズムは一般に存在しない。私たちはいつも推測しなければならず、推測が正しい確率を向上させようと努力するだけで、ミドルネームの部分を単語やフィルターのリストと照らし合わせてチェックすることができます。

0

また、このためにはStringTokenizerを使用することができます。

import java.util.StringTokenizer; 

public class Test { 

    public static void main(String[] args) { 

    String fullName = "John King IV. Cena"; 

    StringTokenizer stok = new StringTokenizer(fullName); 
    String firstName = stok.nextToken(); 

    StringBuilder middleName = new StringBuilder(); 
    String lastName = stok.nextToken(); 
    while (stok.hasMoreTokens()) 
    { 
     middleName.append(lastName + " "); 
     lastName = stok.nextToken(); 
    } 

    System.out.println(firstName); 
    System.out.println(middleName.toString().trim()); 
    System.out.println(lastName); 
    } 
} 
0

更新にコードを処理するために、何の姓、すなわちユーザーがない場合、「マーク」

if(tokens.length > 0) { 
    firstName = tokens[0]; 
    middleName = tokens.length > 2 ? getMiddleName(tokens) : ""; 
    if(tokens.length > 1){ 
     lastName = tokens[tokens.length -1]; 
    } 
}