Java 如何从名称字符串中获取第一个和最后一个首字母/字符
我正在尝试从字符串中提取名字和姓氏的第一个字符,但迄今为止运气不佳。(尝试在线搜索多个解决方案,也没有运气) 例如,如果这是字符串:Java 如何从名称字符串中获取第一个和最后一个首字母/字符,java,android,regex,Java,Android,Regex,我正在尝试从字符串中提取名字和姓氏的第一个字符,但迄今为止运气不佳。(尝试在线搜索多个解决方案,也没有运气) 例如,如果这是字符串: name = A A BCD EFG 我只想显示A和E(比如AE)。 我想知道是否有一个更简单的方法来做到这一点。我正在使用的正则表达式,确实为我获取了第一个字符,但对最后一个字符不起作用,它返回(AEFG),也就是整个姓氏。 有办法吗?这是我的密码: String lastName = ""; String firstName= "";
name = A A BCD EFG
我只想显示A和E(比如AE)。
我想知道是否有一个更简单的方法来做到这一点。我正在使用的正则表达式,确实为我获取了第一个字符,但对最后一个字符不起作用,它返回(AEFG),也就是整个姓氏。
有办法吗?这是我的密码:
String lastName = "";
String firstName= "";
if(name.split("\\w+").length>1){
lastName = name.substring(name.lastIndexOf(" ")+1,1);
firstName = name.substring(0,1);
}
else{
firstName = name;
}
String completeInitials = firstName + " " + lastName;
您可以使用此正则表达式捕获group1中名字的第一个字母和group2中lastname的第一个字母,并将整个匹配替换为
$1$2
,以获得所需的字符串
^\s*([a-zA-Z]).*\s+([a-zA-Z])\S+$
说明:
-字符串的开头^
-匹配可选空白\s*
-匹配名字的第一个字母,并在group1中捕获它([a-zA-Z])
-此处的*\s+
与任何文本都匹配,并且*
确保它与姓氏前的最后一个空格匹配\s+
-这将捕获lastname的第一个字母,并将其捕获到group2中([a-zA-Z])
-匹配lastname的剩余部分和输入的结尾\S+$
String s = "A A BCD EFG";
System.out.println(s.replaceAll("^\\s*([a-zA-Z]).*\\s+([a-zA-Z])\\S+$", "$1$2"));
印刷品
AE
编辑:要将替换的文本转换为大写,如果名称是小写字母,在基于PCRE的正则表达式中,您可以在替换之前使用\U
作为\U$1$2
,但由于这篇文章是用Java编写的,因此无法使用这种方式,因此您可以使用.toUpperCase()
同样的Java代码将使用.toUpperCase()
尽管输入字符串为小写,但仍以大写打印
AE
如何:将名称
字符串
拆分为多个部分。然后取第一部分和最后一部分的第一个char
如果两者都存在,此解决方案将打印两个首字母(名字和姓氏),如果只给出了名字或姓氏,则只打印一个首字母(名字)
private void printInitials(String name) {
String[] nameParts = name.split(" ");
String firstName = nameParts[0];
char firstNameChar = firstName.charAt(0);
if (nameParts.length > 1) {
System.out.println("First character of first name: " + firstNameChar);
String lastName = nameParts[nameParts.length - 1];
char lastNameChar = lastName.charAt(0);
System.out.println("First character of last name: " + lastNameChar);
}
else {
System.out.println("First character name: " + firstNameChar);
}
}
因此,在BCD EFG的情况下,它会打印:
First character of first name: A
First character of last name: E
First character name: A
如果是“AABCDEFG”,它会打印:
First character of first name: A
First character of last name: E
First character name: A
@玛丽莎·尼古拉斯:是的,对,前15分钟是不允许的。谢谢你接受。如果您进一步遇到任何问题或有任何疑问,请随时通知我:)作为更新,您知道我如何将这些首字母大写吗?在基于PCRE的正则表达式中,您可以在替换部件
\U$1$2
之前使用\U
将其转换为大写,但在Java中,我认为这不起作用。但是在Java中,您可以调用.toUpperCase()
将所有字符串转换为大写。让我在我的答案中更新一下。实际上我忘了大写!谢谢你的回答!嘿,你们对我的问题有什么想法吗:(关于上传图片到服务器)