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*
    -匹配可选空白
  • ([a-zA-Z])
    -匹配名字的第一个字母,并在group1中捕获它
  • *\s+
    -此处的
    *
    与任何文本都匹配,并且
    \s+
    确保它与姓氏前的最后一个空格匹配
  • ([a-zA-Z])
    -这将捕获lastname的第一个字母,并将其捕获到group2中
  • \S+$
    -匹配lastname的剩余部分和输入的结尾

Java代码

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()
将所有字符串转换为大写。让我在我的答案中更新一下。实际上我忘了大写!谢谢你的回答!嘿,你们对我的问题有什么想法吗:(关于上传图片到服务器)