Estou a tentar encontrar uma forma de tirar uma entrada char
do teclado.
Eu tentei usar:
Scanner reader = new Scanner(System.in);
char c = reader.nextChar();
Este método não't existe.
Eu tentei tomar c
como um String
. No entanto, nem sempre funcionaria em todos os casos, já que o outro método que estou chamando do meu método requer um char
como entrada. Portanto eu tenho que encontrar uma maneira de tomar explicitamente um char como um input.
Alguma ajuda?
Você poderia pegar o primeiro personagem do Scanner.next
:
char c = reader.next().charAt(0);
Para consumir exatamente um caractere que você poderia usar:
char c = reader.findInLine(".").charAt(0);
Para consumir estritamente um personagem que você poderia usar:
char c = reader.next(".").charAt(0);
Não há nenhum método API para obter um caractere do Scanner. Você deve obter a String utilizando scanner.next()
e invocar String.charAt(0)
no método String retornado.
Scanner reader = new Scanner(System.in);
char c = reader.next().charAt(0);
Só para estar seguro com os espaços em branco, você também pode primeiro chamar trim()
na string para remover quaisquer espaços em branco.
Scanner reader = new Scanner(System.in);
char c = reader.next().trim().charAt(0);
Há três maneiras de abordar este problema:
Chame next()
no Scanner, e extraia o primeiro caractere da String (por exemplo charAt(0)
) Se você quiser ler o resto da linha como caracteres, itere sobre os caracteres restantes na String. Outras respostas têm este código.
Utilize setDelimiter("")
para definir o delimitador para uma string vazia. Isto fará com que o next()
se transforme em strings que tenham exatamente um caractere. Então, você pode repeatedly chamar next().charAt(0)
para iterar os caracteres. Você pode então definir o delimitador para o seu valor original e retomar a varredura da maneira normal!
Use o Reader API em vez do Scanner API. O método Reader.read()
fornece uma leitura de um único caractere a partir do fluxo de entrada. Por exemplo, o método Reader.read()
fornece um único caractere lido do fluxo de entrada:
Leitor = novo leitor InputStreamReader(System.in);
int ch = reader.read();
if (ch != -1) { // verificar por EOF
// nós temos uma personagem ...
}
Quando você lê do console via `System.in', a entrada é tipicamente armazenada pelo sistema operacional, e somente "release" para a aplicação quando o usuário digita ENTER. Portanto, se você pretende que sua aplicação responda aos traços individuais do teclado, isto não vai funcionar. Você precisaria fazer algumas coisas de código nativo específico do SO para desligar ou trabalhar com o buffer de linha para console no nível do SO.
Referência: