O problema que você está enfrentando com o método nextLine() do Scanner em Java é muito comum e ocorre devido ao modo como o Scanner lida com diferentes tipos de entrada.
Quando você usa nextFloat(), nextInt(), ou qualquer método nextXxx() diferente de nextLine(), o Scanner lê o valor numérico, mas não consome o caractere de nova linha (enter) que é gerado quando você pressiona Enter. Esse caractere de nova linha permanece no buffer de entrada do Scanner.
Para resolver isso, você pode adicionar uma chamada a mais de nextLine() após cada nextFloat(), nextInt(), entre outros.. Apenas para consumir o restante da linha incluindo o caractere de nova linha. Isso evita que o próximo nextLine() seja afetado.
Aqui está minha sugestão de implementação:
System.out.println("Digite a descrição da compra:");
String descricao = leituraDoTeclado.nextLine();
System.out.println("Digite o valor da compra:");
float valor = leituraDoTeclado.nextFloat();
leituraDoTeclado.nextLine();
System.out.println("Descrição: " + descricao);
System.out.println("Valor: " + valor);