繁体   English   中英

如何从 Android 中的全名拆分名字和姓氏字符串

[英]How To Split First & Last Name String From Full Name In Android

我有一个带有全名EditText字段的表单,我想将字符串分解为名字和姓氏字符串。 谁可以帮我这个事? 我可以知道实现目标的正确方法是什么吗?

如果用户输入他/她的名字,如ABC 名字将是A & 姓氏将是BC

我正在尝试这个:

EditText UNSP =(EditText)findViewById(R.id.UserNameToSIGNUP);
    String UserFullName=UNSP.getText().toString();

    String[] arr=UserFullName.split(" ");

    String fname=arr[0];
    String lname=arr[1];

    Log.d("First name",fname);
    Log.d("last name",lname);



    if(UserFullName.length()==0) {

        Toast.makeText(getApplicationContext(), "Submit Name", Toast.LENGTH_SHORT).show();
    }

    else{

         Toast.makeText(getApplicationContext(), "Success", Toast.LENGTH_SHORT).show();


    }

}

如果您只需要全名中的姓氏和名字而不使用数组,这是我认为的最佳方法。 名字可以在两个或两个以上的词上,但在现实世界中姓氏总是在一个词上。

    String name = "Abdul Latif Hussain"
    String lastName = "";
    String firstName= "";
    if(name.split("\\w+").length>1){

       lastName = name.substring(name.lastIndexOf(" ")+1);
       firstName = name.substring(0, name.lastIndexOf(' '));
    }
     else{
       firstName = name;
    }

输出字符串将是: firstName="Abdul Latif" lastName="Hussain"

对于多个名称,最好为每个字段设置单独的EditTexts

对于您的实施,如果您可以保证他们以该格式输入它,您可以去:

int firstSpace = UserFullName.indexOf(" "); // detect the first space character
String firstName = UserFullName.substring(0, firstSpace);  // get everything upto the first space character
String lastName = UserFullName.substring(firstSpace).trim(); // get everything after the first space, trimming the spaces off

只需进行一些错误检查以确保格式正确,否则可能会出现异常

在 Kotlin 中,我想出了以下解决方案:

val displayName = "John Smith Fidgerold Trump"
var parts  = displayName.split(" ").toMutableList()
val firstName = parts.firstOrNull()
parts.removeAt(0)
val lastName = parts.joinToString(" ")
Log.debug("*** displayName: $displayName")
Log.debug("*** firsteName : $firstName")
Log.debug("*** lastName : $lastName")
Log.debug("**************")    

示例输出:

> ** displayName: John Smith Fidgerold Trump
> ** firsteName : John
> ** lastName   : Smith Fidgerold Trump
> *************
> ** displayName: John Smith Fidgerold
> ** firsteName : John
> ** lastName   : Smith Fidgerold
> *************
> ** displayName: John Smith
> ** firsteName : John
> ** lastName   : Smith
> *************
> ** displayName: John
> ** firsteName : John
> ** lastName   : 
> *************
> ** displayName: 
> ** firsteName : 
> ** lastName   : 
> *************

请使用这个。 它将工作 100%

str = UNSP.getText().toString();
String[] splited = str.split("\\s+");

使用String.split(" ").更容易String.split(" "). 这将创建分隔的字符串,每个字符串都以找到" "字符时结束。

仅用于名字:

 public static void getUserFirstName(String fullname){
    String firstName;
    String[] fullNameArray = fullname.split("\\s+");
    if(fullNameArray.length>1) {
        StringBuilder firstNameBuilder = new StringBuilder();
        for (int i = 0; i < fullNameArray.length - 1; i++) {
            firstNameBuilder.append(fullNameArray[i]);
            if(i != fullNameArray.length - 2){
                firstNameBuilder.append(" ");
            }
        }
        firstName = firstNameBuilder.toString();
    }
    else{
        firstName = fullNameArray[0];
    }
}

科特林版本:

val fullName = "Adriatik Gashi"
val idx = fullName.lastIndexOf(' ')
if (idx == -1) {
      Toast.makeText(context, "Invalid full name", Toast.LENGTH_LONG).show()
      return
}

val firstName = fullName.substring(0, idx)
val lastName = fullName.substring(idx + 1)
Log.e("SPLITED NAME", firstName + " - " + lastName)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM