如何从名称字符串中获取第一个和最后一个首字母/字符

时间:2019-04-19 19:05:13

标签: java android regex

我正在尝试从字符串中提取姓氏和名字的第一个字符,但到目前为止还没有运气。(尝试在线搜索多个solutiosn,也没有运气) 因此,例如,如果这是字符串:

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;

2 个答案:

答案 0 :(得分:6)

您可以使用此正则表达式捕获组1中名字的第一个字母和组2中姓氏的第一个字母,并用$1$2替换整个匹配项以获取所需的字符串。

^\s*([a-zA-Z]).*\s+([a-zA-Z])\S+$

说明:

  • ^-字符串的开头
  • \s*-匹配可选的空白
  • ([a-zA-Z])-匹配名字的第一个字母并将其捕获到group1中
  • .*\s+-此处.*贪婪地匹配任何文本,\s+确保它匹配姓氏前的最后一个空格
  • ([a-zA-Z])-这将捕获姓氏的第一个字母并将其捕获到group2中
  • \S+$-匹配姓氏的剩余部分和输入的结尾

Regex Demo

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()

Demo for ensuring the replaced text is in upper case

相同的Java代码将使用.toUpperCase()

String s = "a A BCD eFG";
System.out.println(s.replaceAll("^\\s*([a-zA-Z]).*\\s+([a-zA-Z])\\S+$", "$1$2").toUpperCase());

尽管输入字符串为小写,但仍以大写形式打印

AE

答案 1 :(得分:0)

这是怎么回事:将名称String分成几部分。然后采用第一部分和最后一部分的第一个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);
    }
}

因此,对于A A BCD EFG,它会打印:

First character of first name: A
First character of last name: E

如果是'AABCDEFG',它将打印:

First character name: A