Java 是否可以将全名转换为firstname和lastname?

Java 是否可以将全名转换为firstname和lastname?,java,Java,我需要将全名转换为姓和名。如果名字大多是西方的,那么成功率可能在90%以内吗?我不这么认为。这主要取决于你拥有的数据。如果用户总是输入“Firstname Lastname”,那么您可以检查最后一个空格,执行分隔,就是这样 但对于典型的德国客户来说,可能会有大量的匹配缺失。像“Hans Ulrich Schmidt”这样的名字,如果用户忘记了破折号(或者更糟糕的是,没有明确输入破折号),将无法正确解析。但是没有明确的方法来确定“汉斯·乌尔里希·施密特”中的“乌尔里希”是名字的一部分还是姓氏的一部

我需要将全名转换为姓和名。如果名字大多是西方的,那么成功率可能在90%以内吗?

我不这么认为。这主要取决于你拥有的数据。如果用户总是输入“Firstname Lastname”,那么您可以检查最后一个空格,执行分隔,就是这样

但对于典型的德国客户来说,可能会有大量的匹配缺失。像“Hans Ulrich Schmidt”这样的名字,如果用户忘记了破折号(或者更糟糕的是,没有明确输入破折号),将无法正确解析。但是没有明确的方法来确定“汉斯·乌尔里希·施密特”中的“乌尔里希”是名字的一部分还是姓氏的一部分


这只是一个例子,还有很多,所以我认为:不,这是不可能的。

假设您的输入是FirstName LastName,拆分字符串并使用first和last索引:

String bigName = "John McDonalds Harris"
String[] names = bigName.split(" ");
System.out.println(String.format("FirstName: %s : LastName: %s", names[0], names[names.length-1])); 
它将打印:FistName:John:LastName:Harris

假设“西方名字”都有相同的简单格式。事实并非如此。例如,通常有两个“姓氏”,但可能会变得相当复杂

许多欧洲国家都有可能使名字复杂化的名字


名字是文化的,文化比大多数人想象的更为多样和复杂。即使在《西部》中,它也取决于最初的格式。例如,在vCard中,标准格式为

LastName;FirstName
分隔符是分号

一般来说,这是非常困难的。我同意那些已经说过这句话的人。 如果您真的想解决这个问题,就必须实现依赖于语言环境的解析器。例如,英语通常由名字和姓氏组成。匈牙利人写姓氏,然后写名字。在俄语中更为复杂:有时是名字和姓氏,有时使用相反的顺序。这取决于文本样式。在更正式的文本中使用相反的顺序

你可以试着使用名字和姓氏的字典。这在某些情况下会有所帮助。但是像“埃尔顿·约翰”这样的名字怎么办呢?“沃伦·克里斯托弗”怎么样?还有“克里斯托弗·罗宾”

如果您有一个很大的名称列表,并且所有名称都使用相同的格式编写,那么您可以首先使用名称词典检测样式,然后使用它。你可能会获得90%的成功


祝你好运

-1这正是讨论的重点:这不仅仅是“把最后一个字当作姓氏”,这就是问题所在!是的,但必须有一个名字会通过我做的密码,大多数西方名字都是这样的,不是全部是的,但必须有一个,我的名字有两个姓,但就像我说的,必须有一个姓姓姓姓姓姓姓姓姓姓姓姓姓姓姓姓姓姓姓姓姓姓姓姓姓姓姓姓姓姓姓姓姓姓姓姓姓姓姓姓姓姓姓姓姓姓姓姓姓姓姓姓姓姓姓姓姓姓姓姓姓姓姓姓姓姓姓姓姓姓姓姓姓。这似乎对我来说是好的,如果客户对名字不满意,他们可以手动更改名字。吉尔伯特·热拉尔·勒布朗失败了。补充说:至少在瑞士,据我所知,在德国,可以有一个合成的姓氏而不用破折号。所以你完全迷路了。还有地区差异:有些人倾向于先写(和说)他们的姓,然后再写他们的姓,所以“克劳斯·穆勒”变成了“穆勒·克劳斯”。。。你(又)迷路了