2011-07-15 57 views
0

我創建了一個程序,它將解析firstName,middleName和lastName。這是程序和輸出。這個程序肯定可以改進,需要一些輸入來減少我笨重的難看的代碼,並用更好的代碼替換它。任何建議或例子?字符串全名拆分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(); 
    } 
} 

約翰 國王四。 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]; 
    } 
}