Eu estou tentando extrair o primeiro caractere de ambos primeiro e último nome de uma cadeia, mas não tiveram sorte até agora (tentei procurar múltipla solutiosn on-line, sem sorte também) Assim, por exemplo, se esta é a string.:
name = A A BCD EFG
Eu quero mostrar apenas A e E (dizer AE). Eu estou tentando descobrir se há uma maneira mais fácil de fazer isso. A regex Eu estou usando, não me começar o primeiro caractere, mas não funciona para o último caractere, ele retorna (AEFG), também conhecido como o todo do sobrenome vez. Existe uma maneira de fazer isso? Aqui está o meu código:
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;
Você pode usar esse regex para capturar a primeira letra do primeiro nome em grupo1 e primeira letra do sobrenome no group2 e substituir jogo inteiro com $1$2
a obter a seqüência desejada.
^\s*([a-zA-Z]).*\s+([a-zA-Z])\S+$
Explicação:
^
- Início da corda\s*
- Jogos espaço em branco opcional (s)([a-zA-Z])
- Jogos a primeira letra do primeiro nome e captura-o em grupo1.*\s+
- Aqui.*
corresponde a qualquer texto com avidez e\s+
garante que ele combina com o último espaço em branco logo antes sobrenome([a-zA-Z])
- Isto captura a primeira letra do sobrenome e captura-o em group2\S+$
- Jogos restante parte do sobrenome e final da entrada
código Java,
String s = "A A BCD EFG";
System.out.println(s.replaceAll("^\\s*([a-zA-Z]).*\\s+([a-zA-Z])\\S+$", "$1$2"));
Prints,
AE
Edit: Para converter / assegurar o texto substituído para letras maiúsculas, caso o nome é em letras minúsculas, em PCRE regex com base você pode usar \U
um pouco antes da substituição, \U$1$2
mas como este post é em Java, não vai funcionar dessa maneira e, portanto, você pode usar.toUpperCase()
Demo para assegurar o texto substituído é em letras maiúsculas
código Java para mesmo seria usar .toUpperCase()
String s = "a A BCD eFG";
System.out.println(s.replaceAll("^\\s*([a-zA-Z]).*\\s+([a-zA-Z])\\S+$", "$1$2").toUpperCase());
Imprime em maiúsculas, apesar da seqüência de entrada em letras minúsculas,
AE