Чтение одного символа в Java
Как можно вводить символ в Java с клавиатуры?
5 ответов
Вы можете отсканировать всю строку:
Scanner s = new Scanner(System.in);
String str = s.nextLine();
Или вы можете прочитать один char
, учитывая, что вы знаете, с какой кодировкой вы имеете дело:
char c = (char) System.in.read();
Вы можете использовать сканер так:
Scanner s= new Scanner(System.in);
char x = s.next().charAt(0);
Используя функцию charAt, вы можете получить значение первого символа без использования внешнего приведения.
Использование nextline и System.in.read, как часто предлагается, требует от пользователя нажатия клавиши Enter после ввода символа. Тем не менее, люди, которые ищут ответ на этот вопрос, могут быть заинтересованы в том, чтобы напрямую отвечать на нажатие клавиши в консоли!
Я нашел решение сделать это с помощью jline3, в котором мы сначала переводим терминал в режим raw, чтобы напрямую реагировать на клавиши, а затем ждем следующего введенного символа:
var terminal = TerminalBuilder.terminal()
terminal.enterRawMode()
var reader = terminal.reader()
var c = reader.read()
<dependency>
<groupId>org.jline</groupId>
<artifactId>jline</artifactId>
<version>3.12.3</version>
</dependency>
Вы можете использовать Scanner
за это. Не совсем ясно, каковы ваши точные требования, но вот пример, который должен быть иллюстративным:
Scanner sc = new Scanner(System.in).useDelimiter("\\s*");
while (!sc.hasNext("z")) {
char ch = sc.next().charAt(0);
System.out.print("[" + ch + "] ");
}
Если вы дадите этот вклад:
123 a b c x y z
Выход:
[1] [2] [3] [a] [b] [c] [x] [y]
Так что здесь происходит, что Scanner
использования \s*
в качестве разделителя, который является регулярным выражением для "ноль или более пробельных символов". Это пропускает пробелы и т. Д. Во входных данных, поэтому вы получаете только непробельные символы, по одному за раз.
Я нашел этот способ работал хорошо:
{
char [] a;
String temp;
Scanner keyboard = new Scanner(System.in);
System.out.println("please give the first integer :");
temp=keyboard.next();
a=temp.toCharArray();
}
Вы также можете получить индивидуальный с String.charAt()
Вот класс getJ со статической функцией chr(). Эта функция читает один символ.
import java.io.InputStreamReader;
import java.io.BufferedReader;
import java.io.IOException;
class getJ {
static char chr()throws IOException{
BufferedReader bufferReader =new BufferedReader(new InputStreamReader(System.in));
return bufferReader.readLine().charAt(0);
}
}
Чтобы прочитать символ, используйте это:
anyFunc()throws IOException{
...
...
char c=getJ.chr();
}
Поскольку 'chr()' статичен, вам не нужно создавать 'getJ' с помощью 'new'; Я имею в виду, что вам не нужно:
getJ ob = new getJ;
c=ob.chr();
Не забудьте добавить исключение throws IOException в заголовок функции. Если это невозможно, используйте try / catch следующим образом:
anyFunc(){// if it's impossible to add 'throws IOException' here
...
try
{
char c=getJ.chr(); //reads a char into c
}
catch(IOException e)
{
System.out.println("IOException has been caught");
}
Кредит:tutorialspoint.com
См. Также: geeksforgeeks.
.... char ch; ... ch=scan.next().charAt(0); . . Это простой способ получить характер.
Может быть, вы могли бы попробовать этот код:
import java.io.*;
public class Test
{
public static void main(String[] args)
{
try
{
BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
String userInput = in.readLine();
System.out.println("\n\nUser entered -> " + userInput);
}
catch(IOException e)
{
System.out.println("IOException has been caught");
}
}
}