我之前曾就此做过一个主题,但它被关闭并标记为“偏离主题”。我尝试阅读常见问题解答,但不明白为什么,如果这也是题外话,请原谅我,但我对这个问题还有一些其他问题。
我有一个包含以下格式的全名的字段: 第一,最后(MI)
挑战:
中间名首字母并不总是存在,因为某些条目没有列出中间名首字母。
某些中间名首字母末尾有句点。
许多姓名都是西类牙语姓名,因此可以有多个名字和姓氏,因此不能用空格分隔字段。
名称字段末尾可能有空格。
中间名可能包含重音字符(我找不到任何以重音开头的西类牙语中间名,但我不能确定我们不会有任何重音字符)。
到目前为止我做了什么:
我做的第一件事是使用 trim() 删除字段末尾的任何填充。
FName.trim()
接下来,我将姓名分为名字和姓氏,如下所示:
String[] 名称 = FName.split(",");
我需要将中间名与姓氏分开,然后我可以执行以下操作:
FName = 名称[0] + ""名称 [1] + ""+ 名称 [2]
我坚持的是什么:
我需要使用 RegEx 检查姓氏并查看最后一个字符是否是句点。如果是,那么我需要检查它前面的字符是否是空格+字母(可能有重音)。如果没有句点,我仍然需要检查是否有空格+字母。
例如:
John, Doe F --> John F Doe
John, Doe F. --> John F. Doe
我需要稍后删除逗号,但通过执行 FName.replace(",","") 可以轻松解决此问题
一些更具挑战性的名称示例:
VICTOR, RAMIREZ-BRIANO M
FELIX, DEL VALLE-ORTIZ G.
SANDRA, DE LEON MENDOZA A
MARIA, HERNANDEZ-DE LA TORRE ISABEL J.
CARLOS ARMANDO, PEREZ-FERNANDEZ L
J. CONCEPCION, RODRIGUEZ-BALDERAS
MIGUEL A, LUZURIAGA-ALVAREZ
最佳答案
您可以用一行完成:
name = name.replaceAll(",(.*?)( \\w\\.?)?$", "$2$1");
无论中间名首字母是否出现在末尾,这都有效。
<小时/>这是使用上述行的一些测试代码以及问题中的示例:
String[] names = { "John, Doe F", "John, Doe F.", "John, Doe", "VICTOR, RAMIREZ-BRIANO M", "FELIX, DEL VALLE-ORTIZ G.", "SANDRA, DE LEON MENDOZA A", "MARIA, HERNANDEZ-DE LA TORRE ISABEL J.", "CARLOS ARMANDO, PEREZ-FERNANDEZ L", "J. CONCEPCION, RODRIGUEZ-BALDERAS", "MIGUEL A, LUZURIAGA-ALVAREZ" };
for (String name : names)
System.out.println(name + " --> " + name.replaceAll(",(.*?)( \\w\\.?)?$", "$2$1"));
输出:
John, Doe F --> John F Doe
John, Doe F. --> John F. Doe
John, Doe --> John Doe
VICTOR, RAMIREZ-BRIANO M --> VICTOR M RAMIREZ-BRIANO
FELIX, DEL VALLE-ORTIZ G. --> FELIX G. DEL VALLE-ORTIZ
SANDRA, DE LEON MENDOZA A --> SANDRA A DE LEON MENDOZA
MARIA, HERNANDEZ-DE LA TORRE ISABEL J. --> MARIA J. HERNANDEZ-DE LA TORRE ISABEL
CARLOS ARMANDO, PEREZ-FERNANDEZ L --> CARLOS ARMANDO L PEREZ-FERNANDEZ
J. CONCEPCION, RODRIGUEZ-BALDERAS --> J. CONCEPCION RODRIGUEZ-BALDERAS
MIGUEL A, LUZURIAGA-ALVAREZ --> MIGUEL A LUZURIAGA-ALVAREZ
关于java - 需要帮助使用 java 正则表达式将中间首字母从名称末尾移动到中间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23695785/