Ajuda com um Exercício de Java

Eu não estou conseguindo resolver esse exercício que me foi passado, se alguém puder me dar uma luz eu agradeceria :

Ao desenvolver nossos algoritmos utilizamos com frequência a Classe Scanner e seus métodos para ler os tipos de dado String, Float, Double, Int e Char. Com frequência nos deparamos com várias chamadas ao objeto Scanner o que às vezes até mostra muito código repetido.
Para aprimorar nosso código, vamos desenvolver uma classe que facilite nosso trabalho. Nessa classe que podemos chamar de Utils ou Teclado ou Leitura você irá criar, para cada um dos tipos de dados String, Float, Double, Int e Char dois métodos de leitura.

Um método que mostre uma mensagem padrão para leitura de um tipo de dado(ex: “Digite um inteiro”) e retorna o dado lido;
Um método que mostra uma mensagem passada por parâmetro(Nesse caso a mensagem que será exibida deve ser um parâmetro passado) e retorna o dado lido;

Na mesma classe crie outros métodos:
Um método para Ler uma string formatada como e-mail, o método deve retornar o email quando válido ou null se for inválido;
Um método para Ler uma string formatada como telefone (DDD-XXXXXXXXX), o método deve retornar o telefone quando válido ou null se for inválido;
Um método para ler uma string formatada como uma data(dd/mm/aaaa)o método deve retornar a data quando válido ou null se for inválido;
Um método para converter uma data dd/mm/aaaa para mm/dd/aaaa
Um método para validar se um dado lido é um dígito numérico.

Faça uma classe para testar seus métodos.

E qual a sua dúvida?

Assim já dá pra você começar:

public class Leitura {

    public String lerString() {
        return lerString("Digite uma String");
    }

    public float lerFloat() {
        return lerFloat("Digite um float");
    }

    public double lerDouble() {
        return lerDouble("Digite um double");
    }

    public int lerInt() {
        return lerInt("Digite um int");
    }

    public char lerChar() {
        return lerChar("Digite um char");
    }

    public String lerString(String mensagem) {
        // aqui você apresenta a mensagem e retorna a String lida
    }

    public float lerFloat(String mensagem) {
        // aqui você apresenta a mensagem e retorna o float lido
    }

    public double lerDouble(String mensagem) {
        // aqui você apresenta a mensagem e retorna o double lido
    }

    public int lerInt(String mensagem) {
        // aqui você apresenta a mensagem e retorna o int lido
    }

    public char lerChar(String mensagem) {
        // aqui você apresenta a mensagem e retorna o char lido
    }
}