String fullname拆分java

时间:2011-07-15 03:56:17

标签: java

我创建了一个解析firstName,middleName和lastName的程序。这是程序和输出。这个程序肯定可以改进,需要一些输入来减少我繁琐的丑陋代码并用更好的代码替换它。有什么建议或例子吗?

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();
  }
}

约翰 国王四。 以上的价格

4 个答案:

答案 0 :(得分:2)

如果姓氏有多个单词,如 Abraham Van Helsing ,算法将失败。 Van 不是中间名,而是姓氏的一部分。

显然,没有算法可以清楚地区分中间名和姓。我们总是要猜测,我们只能尝试提高猜测正确的概率,也许是根据单词或过滤器列表检查中间名称部分。

答案 1 :(得分: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);
  }
}

答案 3 :(得分:0)

更新代码以处理没有姓氏的地方,即用户只输入第一个名称,如“Mark”

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