我创建了一个解析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();
}
}
约翰 国王四。 以上的价格
答案 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];
}
}