Чтение одного символа в 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.

Java BufferedReader ввода GetChar символ

.... 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");
  }
 }
}
Другие вопросы по тегам