Ajuda com exercício em programação java

Boa noite, estou começando em programação orientada a objetos, porém estou com dificuldades no seguinte exercício:

Exercício 1: Livro

Neste exercício, você deve criar um projeto chamado MeuLivro no software NetBeans e também construir uma classe chamada Livro.java que contenha os seguintes atributos:

String titulo;
int ano;
String editora;
String autor;

// implementar os métodos setters e getters e os demais métodos:
public String obterAutorFormatoAbnt ()
public String obterInformacaoCompletaLivro ()

O método obterAutorFormatoAbnt retorna uma String contendo o valor do atributo autor no formato: SOBRENOME, Nome. Ex.: José de Alencar = ALENCAR, José de. O sobrenome deve estar em maiúsculo, seguido de vírgula, somado ao restante do nome e do ponto final.

O método obterInformacaoCompletaLivro retorna uma String no seguinte formato: ALENCAR, José de. Iracema. editora: Typ. de Viana & Filhos. 1865. Ou seja, Autor. Título. Editora: nome da editora. Ano.

Nesse sentido, você deve criar uma instância da classe livro, solicitar os valores para o usuário e, em seguida, chamar os referidos métodos escrevendo o resultado em vídeo. O programa executa apenas uma vez.

A minha maior dificuldade é implementar estes dois métodos:

public String obterAutorFormatoAbnt ()
public String obterInformacaoCompletaLivro ()

Fico no aguardo de alguém puder me ajudar

  • Quais são suas dificuldades?
  • O professor não ensinou criar um classe e colocar os métodos e seus atributos?
  • O que você fez até o momento?

Observação: Se eu fizer você não aprende, é muito fácil fazer esse exercício, mas, estamos aqui para tirar as suas duvidas, quais são as suas verdadeiras duvidas?

A parte do nome do autor não é tão obvia, por isso a implementei abaixo e comentei as linhas.

public class Test {
    static String formataNome(String nome) {
        // Pega a posição do espaço entre a última e a penúltima palavra
        int ultimoEspaco = nome.lastIndexOf(' ');

        // Pega a string que vai do primeiro caracter até o último espaço
        String parte1 = nome.substring(0, ultimoEspaco);

        // Pega a string que vai do último espaço até o final
        String parte2 = nome.substring(ultimoEspaco).trim().toUpperCase();

        // Formata a string e retorna
        return String.format("%s, %s.", parte2, parte1);
    }

    public static void main(String[] args) {
        String nome = "José de Alencar";
        System.out.println(formataNome(nome));
    }
}

Está parte lhe ajudará a implementar o outro método que falta.

Classe:

public class Livro {
    private String titulo;
    private int ano;
    private String editora;
    private String autor;

    public String getTitulo() {
        return titulo;
    }

    public int getAno() {
        return ano;
    }

    public String getEditora() {
        return editora;
    }

    public String getAutor() {
        return autor;
    }

    public void setTitulo(String titulo) {
        this.titulo = titulo;
    }

    public void setAno(int ano) {
        this.ano = ano;
    }

    public void setEditora(String editora) {
        this.editora = editora;
    }

    public void setAutor(String autor) {
        this.autor = autor;
    }
    public String obterAutorFormatoAbnt() {
        if (autor.length() > 0){
            int lastIndex = autor.lastIndexOf(' ');
            String end = autor
                   .substring(lastIndex, autor.length())
                   .trim()
                   .toUpperCase();
            String first = autor.substring(0, lastIndex).trim();
           return String.format("%s, %s.", end, first); 
        }
        return null;
    }
    
    public String obterInformacaoCompletaLivro (){             
        return String.format("%s%s.%s.%s.", obterAutorFormatoAbnt(), titulo, editora, ano);
    }
    
}

Código:

Livro liv = new Livro();
liv.setAno(1865);
liv.setAutor("José de Alencar");
liv.setEditora("Typ de Viana & Filhos");
liv.setTitulo("Iracema");
System.out.println(liv.obterAutorFormatoAbnt());
System.out.println(liv.obterInformacaoCompletaLivro());

Código em execução online

Observação: não fiz todas as verificações, fiz a grosso modo.

2 curtidas
    String nome = "José de Alencar";
    
    String[]  sobrenome = nome.split(" ");
    System.out.println(sobrenome[sobrenome.length - 1]
            .toUpperCase()+","+sobrenome[0]);

Acho que isso vc pode colocar no método que retorna o nome do autor, susbtituir ( System.out.println() por return no método de tipo String.

Queria agradecer pelas ajuda de todos.
Obrigado!