Pick up the first letter of the last name and last name?

2

I'm using the code below to get the first letter of the first and last name.

It's working, but I see the following problem for a longer name:

Example:

  

Carlos Eduardo Martins Rego Dutra

public static void main(String[] args) {

    String nome = "Carlos Eduardo Martins Dutra do Rego";
    String primeiraLetraNomeSobrenome = "";
    for (char letra : nome.toCharArray()) {
        if (Character.isUpperCase(letra)) {
            primeiraLetraNomeSobrenome += letra;
        }
    }
    System.out.println("resultado: "+ primeiraLetraNomeSobrenome);
}

I get: CEMDR

I wanted to get the first and the last one getting CR . Would you have any tips for me to solve this?

    
asked by anonymous 28.03.2017 / 14:56

2 answers

3

To get the first letter of the last name you can use the lastIndexOf() method of the String class:

String nome = "Carlos Eduardo Martins Dutra do Rego";
int posicaoUltimoEspaco = nome.lastIndexOf(" ");
String primeiraLetraUltimoNome = nome.substring(posicaoUltimoEspaco + 1, posicaoUltimoEspaco + 2);

By doing nome.lastIndexOf(" ") , the position of the last space character will be returned.

Then:

String primeiraLetraUltimoNome = nome.substring(posicaoUltimoEspaco + 1, posicaoUltimoEspaco + 2);
  • posicaoUltimoEspaco + 1 : The position of the last space is the space character itself. I'm adding% with% to pick up from the next character.

  • +1 : Continuing the reasoning of the above item, I add posicaoUltimoEspaco + 2 to indicate I want until the next caracetere.

To get the first letter of the first name just do:

String nome = "Carlos Eduardo Martins Dutra do Rego";
String primeiraLetra = Character.toString(nome.charAt(0));

EDIT

The +2 method returns lastIndexOf() if it does not find any records of the searched String. It is necessary to do a small check before:

int posicaoUltimoEspaco = nome.lastIndexOf(" ");
String primeiraLetraUltimoNome = "";
if(posicaoUltimoEspaco > 0) {
    primeiraLetraUltimoNome = nome.substring(posicaoUltimoEspaco + 1, posicaoUltimoEspaco + 2);
}
    
28.03.2017 / 15:15
6

Particularly I would greatly facilitate your code in this way. Obviously you need to validate if the received string is not null or empty, but that's just detail, the focus here is implementation.

String nome = "Carlos Eduardo Martins Dutra do Rego";
String[] array = nome.split(" ");
// ^ Cria um array onde cada elemento é uma das palavras

String resultado = String.valueOf(array[0].charAt(0));
// ^ Captura a primeira letra da primeira palavra do array    

if(array.length > 1)
    resultado += array[array.length - 1].charAt(0);
    // ^ Captura a primeira letra da última palavra, apenas se tiver mais de uma palavra

System.out.println("resultado: "+ resultado);

If you just want to complement your current method, you only need to get the first and last character of the string produced with charAt(0) and charAt(tamanhoDaString - 1) .

String nome = "Carlos Eduardo Martins Dutra do Rego";
String primeiraLetraNomeSobrenome = "";
for (char letra : nome.toCharArray()) {
    if (Character.isUpperCase(letra)) {
        primeiraLetraNomeSobrenome += letra;
    }
}

String primeiraUltima = primeiraLetraNomeSobrenome.charAt(0) + 
                primeiraLetraNomeSobrenome.charAt(primeiraLetraNomeSobrenome.length() -1);

System.out.println("resultado: "+ primeiraUltima);
    
28.03.2017 / 15:06