【发布时间】:2020-03-12 09:44:34
【问题描述】:
我最近完成了以下编程练习:Acronym Generator
声明是:
几乎在每家公司中,每个员工都有一个特定的首字母缩写词,其中包含 他的名字和姓氏的第一个字符。
你的任务是编写一个生成首字母缩略词的首字母缩略词生成器 对于给定的名称。您不必关心重复的首字母缩略词 (其他人会为你做这件事)。请注意,名称可以在 大写或小写。首字母缩写词应始终为大写。
通常,首字母缩写词始终是您的第一个字母的第一个字母,而 姓氏的第一个字母大写。
例如:
Thomas Meyer => TM martin schmidt => MS在你的公司里,只有最多两个第一的人工作 名字。如果一个人有两个名字,他们可能会用一个 破折号。
Jan-Erich Schmidt => JES Jan Erich Mueller => JEM姓氏也可以用破折号连接。没有人可以拥有超过 两个姓氏。
Paul Meyer-Schmidt在德国,有些姓氏的前导词是“von”。 这应缩写为小写“v”:
Paul von Lahnstein => PvL Martin von Lahnstein-Meyer => MvLM
我已经完成了练习,我正在尝试理解其他人的答案。我找到了一个使用replaceAll 和正则表达式的。可以看这个解决方案in this link.
public class AcronymGenerator {
public static String createAcronym(String lastName, String firstName) {
firstName = firstName.toUpperCase().replaceAll("(.)([A-Z])*([-| ])?(.)?(.)*", "$1$4");
String von = lastName.toLowerCase().replaceAll("^((v)(on ))?(.)*", "$2");
lastName = lastName.toUpperCase().replaceAll("(VON )?(.)([A-Z])*([-| ])?(.)?(.)*", "$2$5");
return firstName+von+lastName;
}
}
我猜他所做的是将名字替换为大写字母的首字母,von 替换为 v,姓氏替换为大写字母的首字母。但是,我不明白在 replaceAll 中使用时,正则表达式组是如何工作的
您能解释一下 replaceAll() 如何与正则表达式组一起工作吗?我想了解它是如何工作的:
replaceAll("(.)([A-Z])*([-| ])?(.)?(.)*", "$1$4");
replaceAll("^((v)(on ))?(.)*", "$2");
replaceAll("(VON )?(.)([A-Z])*([-| ])?(.)?(.)*", "$2$5");
我也读过: Java: Understanding the String replaceAll() method What is a non-capturing group in regular expressions? How to Extract people's last name start with "S" and first name not start with "S"
【问题讨论】:
-
我只是想知道如何在致电
createAcronym(String lastName, String firstName)之前将全名正确拆分为名字和姓氏。当然可以,只是在给定的规则下,这似乎并不简单。 -
@OleV.V.如果您要求用户在一个字段中输入名字并在另一个字段中输入姓氏,这非常简单。