Estou tentando encontrar uma maneira de obter uma char
entrada do teclado.
Eu tentei usar:
Scanner reader = new Scanner(System.in);
char c = reader.nextChar();
Este método não existe.
Eu tentei tomar c
como String
. No entanto, nem sempre funcionaria em todos os casos, pois o outro método que estou chamando do meu método exige a char
como entrada. Portanto, tenho que encontrar uma maneira de usar explicitamente um char como entrada.
Qualquer ajuda?
java
input
char
java.util.scanner
Ralph
fonte
fonte
char c = reader.next("[a-zA-Z]").charAt(0);
Scanner de configuração:
Depois disso
reader.next()
, retornará uma sequência de caracteres únicos.fonte
Não existe um método de API para obter um caractere do scanner. Você deve obter a String usando
scanner.next()
e invocar oString.charAt(0)
método na String retornada.Para garantir a segurança dos espaços em branco, você também pode chamar
trim()
a string primeiro para remover os espaços em branco.fonte
reader.next()
já não forneceria a string a partir do primeiro caractere não branco?Existem três maneiras de abordar esse problema:
Ligue
next()
para o Scanner e extraia o primeiro caractere da String (por exemplocharAt(0)
). Se você quiser ler o restante da linha como caracteres, itere sobre os caracteres restantes na String. Outras respostas têm esse código.Use
setDelimiter("")
para definir o delimitador para uma sequência vazia. Isso fará comnext()
que o tokenize em seqüências de caracteres com exatamente um caractere. Então você pode ligar repetidamentenext().charAt(0)
para iterar os caracteres. Você pode então definir o delimitador para o valor original e retomar a digitalização da maneira normal!Use a API do Reader em vez da API do scanner. O
Reader.read()
método fornece uma única leitura de caractere do fluxo de entrada. Por exemplo:Quando você lê do console via
System.in
, a entrada geralmente é armazenada em buffer pelo sistema operacional e somente "liberada" para o aplicativo quando o usuário digita ENTER. Portanto, se você pretende que seu aplicativo responda a toques de teclado individuais, isso não vai funcionar. Você precisaria fazer algumas coisas de código nativo específicas do SO para desativar ou contornar o buffer de linha do console no nível do SO.Referência:
fonte
Você pode resolver esse problema de "pegar a entrada do teclado um caractere de cada vez" de maneira muito simples. Sem ter que usar um scanner tudo e também não limpar o buffer de entrada como efeito colateral, usando isso.
Se tudo o que você precisa é da mesma funcionalidade que a função "getChar ()" da linguagem C, isso funcionará muito bem. A grande vantagem do "System.in.read ()" é que o buffer não é limpo depois de cada caracterização. Portanto, se você ainda precisar da entrada de todos os usuários, poderá obter o restante do buffer de entrada. O
"char c = scanner.next().charAt(0);"
caminho pega o char, mas limpa o buffer.Espero que isso seja útil e boa sorte! PS Desculpe, eu sei que este é um post mais antigo, mas espero que minha resposta traga novas idéias e possa ajudar outras pessoas que também têm esse problema.
fonte
Na verdade, isso não funciona:
Há algumas boas explicações e referências nesta pergunta: Por que a classe Scanner não possui um método nextChar? "Um scanner divide sua entrada em tokens usando um padrão delimitador", que é bastante aberto. Por exemplo, ao usar este
para esta linha de entrada "(1 + 9) / (3 - 1) + 6 - 2" a chamada para os próximos retornos "(1", c será definida como '(' e você acabará perdendo o ' 1 'na próxima chamada para a próxima ()
Normalmente, quando você deseja obter um personagem, você gostaria de ignorar o espaço em branco. Isso funcionou para mim:
Referência: regex para corresponder a um único caractere que não é um espaço
fonte
"[^\\s]" === "\\S"
A melhor maneira de obter a entrada de um caractere na classe Scanner é:
fonte
fonte
Tente isso: char c = S.nextLine (). CharAt (0);
fonte
Você deve usar seu leitor de entrada personalizado para obter resultados mais rápidos, em vez de extrair o primeiro caractere da leitura de String. Link para o ScanReader personalizado e explicação: https://gist.github.com/nik1010/5a90fa43399c539bb817069a14c3c5a8
Código para digitalizar Char:
fonte
Existem duas abordagens: você pode usar exatamente um caractere ou estritamente um caractere. Quando você usa exatamente, o leitor terá apenas o primeiro caractere, independentemente de quantos caracteres você inserir.
Por exemplo:
Quando você fornecer um conjunto de caracteres como entrada, diga "abcd", o leitor considerará apenas o primeiro caractere, ou seja, a letra 'a'
Mas quando você usa estritamente, a entrada deve ser apenas um caractere. Se a entrada tiver mais de um caractere, o leitor não aceitará a entrada.
Suponha que você dê a entrada "abcd", nenhuma entrada seja feita e a variável c terá valor nulo.
fonte
Para obter apenas um caractere char c = reader.next ("."). CharAt (0);
fonte
fonte
Você deve obter a String usando o scanner.next () e chamar o método String.charAt (0) na String retornada.
Exemplo:
resultado
fonte
você só precisa escrever isso para obter valor no tipo de caractere.
fonte
fonte
Tente isto
fonte
A propósito, você não pode pegar um char diretamente como uma entrada. Como você pode ver acima, uma String é primeiro obtida e depois charAt (0); é encontrado e armazenado
fonte
Apenas use...
Isso obtém o primeiro caractere da próxima entrada.
fonte
Você pode usar a conversão de texto:
Dessa forma, você receberá a entrada em String devido à função 'next ()', mas depois será convertida em caractere devido ao 'char' mencionado entre colchetes.
Esse método de conversão do tipo de dados, mencionando o tipo de dado de destino entre colchetes, é chamado de digitação. Funciona para mim, espero que funcione para você :)
fonte
String
para achar
.Para encontrar o índice de um caractere em uma determinada picada, você pode usar este código:
fonte
A maneira mais fácil é, primeiro altere a variável para uma String e aceite a entrada como uma string. Em seguida, você pode controlar com base na variável de entrada com uma instrução if-else ou switch da seguinte maneira.
fonte