Método para formartar String autor

Boa noite Pessoal, tudo bem?
Eu estou realizando um exercício em Java e travei em uma parte. Gostaria da ajuda de vocês.
Eu tenho uma classe livro que contem os seguintes atributos

image

O Exercício proposto é que eu pegue a String Autor e formate ela para o padrão ABNT, por exemplo: Ex.: José de Alencar = ALENCAR, José de

Estou meio travado quanto a lógica que preciso aplicar para isto.

Poderiam me ajudar?

Obrigado!

A lógica é a mesma que você faz ao escrever:

  • Pega a última parte do nome;
  • Converte pra maiúsculo;
  • Acrescenta uma vírgula;
  • Acrescenta a(s) primeira(s) parte(s) do nome.

Programa de exemplo:

public class Exemplo {

    public static void main(String[] args) {
        Exemplo programa = new Exemplo();
        programa.executar();
    }

    public void executar() {
        System.out.println(formatoAbnt("José de Alencar"));
        System.out.println(formatoAbnt("André Luiz"));
        System.out.println(formatoAbnt("Ricardo Artur Staroski"));
    }

    private String formatoAbnt(String nomeCompleto) {
        String[] partes = nomeCompleto.split("\\s");
        int ultimo = partes.length - 1;
        String sobrenome = partes[ultimo];
        StringBuilder nomeFormatado = new StringBuilder();
        nomeFormatado.append(sobrenome.toUpperCase());
        nomeFormatado.append(",");
        for (int i = 0; i < ultimo; i++) {
            nomeFormatado.append(" ");
            nomeFormatado.append(partes[i]);
        }
        return nomeFormatado.toString();
    }
}

Saída:

ALENCAR, José de
LUIZ, André
STAROSKI, Ricardo Artur
1 curtida

Entendi, muito obrigado!
Ontem eu pesquisei bastante e até encontrei uma solução mas acabei não entendo ela muito bem, pois tinha só o código e eu ainda to bem no inicio do curso.

image

O código tinha essas instruções, porém não entendo muito bem a função do primeiro loop, você poderia me explicar ele? E também essa parte do código que você passou

“int ultimo = partes.length - 1;”

a parte do -1 me confunde, desculpe se talvez esse tipo de pergunta soe meio burra, mas realmente tenho essa dúvida.

É um laço que começa na última letra do nome

autor.length() - 1

e enquanto cada caractere encontrado for diferente de espaço em branco

autor.charAt(i) != ' '

vai vindo pra frente

i--

convertendo o caractere pra letra maiúscula

Character.toUpperCase(autor.charAt(i))

A variável partes é o nome completo com suas partes separadas pelo espaço em branco.
Por exemplo, uma String com meu nome "Ricardo Artur Staroski" se for quebrada em partes, vai gerar um array com 3 elementos:

String[] partes = new String[] { "Ricardo", "Artur", "Staroski" };

O atributo length de um array diz quantos elementos ele possui, no caso do array partes acima, o length vai ser 3, pois contém 3 elementos.

As posições do array começam em 0.
O primeiro elemento está na posição 0.
O segundo elemento está na posição 1.
O terceiro elemento está na posição 2.

Por isso a variável ultimo foi inicializada com partes.length - 1
Essa é a forma de obter a posição do último elemento.

Não se deve pedir desculpas por perguntar.
Quem deve pedir desculpas são as pessoas ignorantes que se recusam a perguntar quando tem dúvida.
:wink:

1 curtida

Muito obrigado! Respondeu tudo e me esclareceu muita coisa, vai me ajudar muito nas próximas tarefas. Obrigado pelo tempo e pela ótima explicação

1 curtida