2011-07-15 58 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]; 
    } 
}