Como posso ler a input do console usando a class Scanner em Java?

Como eu poderia ler a input do console usando a class Scanner ? Algo assim:

 System.out.println("Enter your username: "); Scanner = input(); // Or something like this, I don't know the code 

Basicamente, tudo que eu quero é que o scanner leia uma input para o nome de usuário e atribua a input a uma variável String .

   

Um exemplo simples para ilustrar como o java.util.Scanner trabalha seria ler um único inteiro de System.in . É muito simples.

 Scanner sc = new Scanner(System.in); int i = sc.nextInt(); 

Para recuperar um nome de usuário, provavelmente usaria sc.nextLine() .

 System.out.println("Enter your username: "); Scanner scanner = new Scanner(System.in); String username = scanner.nextLine(); System.out.println("Your username is " + username); 

Você também pode usar next(String pattern) se quiser mais controle sobre a input ou apenas validar a variável username .

Você encontrará mais informações sobre sua implementação na Documentação da API para java.util.Scanner

 Scanner scan = new Scanner(System.in); String myLine = scan.nextLine(); 

Lendo dados do console

  • BufferedReader é sincronizado, portanto, as operações de leitura em um BufferedReader podem ser feitas com segurança a partir de vários encadeamentos. O tamanho do buffer pode ser especificado ou o tamanho padrão ( 8192 ) pode ser usado. O padrão é grande o suficiente para a maioria dos propósitos.

    readLine () « apenas lê linha por linha de dados do stream ou fonte. Uma linha é considerada como terminada por qualquer uma delas: \ n, \ r (ou) \ r \ n

  • Scanner quebra sua input em tokens usando um padrão delimitador, que por padrão corresponde ao espaço em branco (\ s) e é reconhecido pelo Character.isWhitespace .

    « Até o usuário inserir dados, a operação de varredura pode bloquear, aguardando a input. « Use Scanner ( BUFFER_SIZE = 1024 ) se quiser analisar um tipo específico de token de um stream. « Um scanner, no entanto, não é thread-safe. Tem que ser sincronizado externamente.

    next () «Encontra e devolve o próximo token completo deste scanner. nextInt () «Analisa o próximo símbolo da input como um int.

Código

 String name = null; int number; java.io.BufferedReader in = new BufferedReader(new InputStreamReader(System.in)); name = in.readLine(); // If the user has not entered anything, assume the default value. number = Integer.parseInt(in.readLine()); // It reads only String,and we need to parse it. System.out.println("Name " + name + "\t number " + number); java.util.Scanner sc = new Scanner(System.in).useDelimiter("\\s"); name = sc.next(); // It will not leave until the user enters data. number = sc.nextInt(); // We can read specific data. System.out.println("Name " + name + "\t number " + number); // The Console class is not working in the IDE as expected. java.io.Console cnsl = System.console(); if (cnsl != null) { // Read a line from the user input. The cursor blinks after the specified input. name = cnsl.readLine("Name: "); System.out.println("Name entered: " + name); } 

Entradas e saídas do Stream

 Reader Input: Output: Yash 777 Line1 = Yash 777 7 Line1 = 7 Scanner Input: Output: Yash 777 token1 = Yash token2 = 777 

Existem várias maneiras de obter informações do usuário. Aqui neste programa, faremos a class Scanner para realizar a tarefa. Esta class Scanner vem com java.util , portanto, a primeira linha do programa é import java.util.Scanner; que permite ao usuário ler valores de vários tipos em Java. A linha da instrução de importação deve estar na primeira linha do programa java e continuaremos com o código.

 in.nextInt(); // It just reads the numbers in.nextLine(); // It get the String which user enters 

Para acessar methods na class Scanner, crie um novo object de scanner como “in”. Agora usamos um de seus methods, que é “next”. O método “next” obtém a string de texto que um usuário digita no teclado.

Aqui estou usando in.nextLine(); para obter o String que o usuário digita.

 import java.util.Scanner; class GetInputFromUser { public static void main(String args[]) { int a; float b; String s; Scanner in = new Scanner(System.in); System.out.println("Enter a string"); s = in.nextLine(); System.out.println("You entered string " + s); System.out.println("Enter an integer"); a = in.nextInt(); System.out.println("You entered integer " + a); System.out.println("Enter a float"); b = in.nextFloat(); System.out.println("You entered float " + b); } } 
 import java.util.Scanner; public class ScannerDemo { public static void main(String[] arguments){ Scanner input = new Scanner(System.in); String username; double age; String gender; String marital_status; int telephone_number; // Allows a person to enter his/her name Scanner one = new Scanner(System.in); System.out.println("Enter Name:" ); username = one.next(); System.out.println("Name accepted " + username); // Allows a person to enter his/her age Scanner two = new Scanner(System.in); System.out.println("Enter Age:" ); age = two.nextDouble(); System.out.println("Age accepted " + age); // Allows a person to enter his/her gender Scanner three = new Scanner(System.in); System.out.println("Enter Gender:" ); gender = three.next(); System.out.println("Gender accepted " + gender); // Allows a person to enter his/her marital status Scanner four = new Scanner(System.in); System.out.println("Enter Marital status:" ); marital_status = four.next(); System.out.println("Marital status accepted " + marital_status); // Allows a person to enter his/her telephone number Scanner five = new Scanner(System.in); System.out.println("Enter Telephone number:" ); telephone_number = five.nextInt(); System.out.println("Telephone number accepted " + telephone_number); } } 

Você pode criar um programa simples para solicitar o nome do usuário e imprimir, seja qual for a resposta, usando inputs.

Ou peça ao usuário para inserir dois números e você pode adicionar, multiplicar, subtrair ou dividir esses números e imprimir as respostas para as inputs do usuário, assim como o comportamento de uma calculadora.

Então você precisa da class Scanner. Você tem que import java.util.Scanner; e no código que você precisa usar:

 Scanner input = new Scanner(System.in); 

input é um nome de variável.

 Scanner input = new Scanner(System.in); System.out.println("Please enter your name: "); s = input.next(); // Getting a String value System.out.println("Please enter your age: "); i = input.nextInt(); // Getting an integer System.out.println("Please enter your salary: "); d = input.nextDouble(); // Getting a double 

Veja como isso difere: input.next(); , i = input.nextInt(); d = input.nextDouble();

De acordo com um String, int e um double varia da mesma maneira para o resto. Não esqueça a declaração de importação no topo do seu código.

Um exemplo simples:

 import java.util.Scanner; public class Example { public static void main(String[] args) { int number1, number2, sum; Scanner input = new Scanner(System.in); System.out.println("Enter First multiple"); number1 = input.nextInt(); System.out.println("Enter second multiple"); number2 = input.nextInt(); sum = number1 * number2; System.out.printf("The product of both number is %d", sum); } } 

Existe um problema com o método input.nextInt () – ele apenas lê o valor int.

Portanto, ao ler a próxima linha usando input.nextLine (), você recebe “\ n”, isto é, a tecla Enter . Então, para pular isso você tem que adicionar o input.nextLine ().

Experimente assim:

  System.out.print("Insert a number: "); int number = input.nextInt(); input.nextLine(); // This line you have to add (it consumes the \n character) System.out.print("Text1: "); String text1 = input.nextLine(); System.out.print("Text2: "); String text2 = input.nextLine(); 
  1. Para ler a input:

     Scanner scanner = new Scanner(System.in); String input = scanner.nextLine(); 
  2. Para ler a input quando você chama um método com alguns argumentos / parâmetros:

     if (args.length != 2) { System.err.println("Utilizare: java Grep  "); System.exit(1); } try { grep(args[0], args[1]); } catch (IOException e) { System.out.println(e.getMessage()); } 
 import java.util.*; class Ss { int id, salary; String name; void Ss(int id, int salary, String name) { this.id = id; this.salary = salary; this.name = name; } void display() { System.out.println("The id of employee:" + id); System.out.println("The name of employye:" + name); System.out.println("The salary of employee:" + salary); } } class employee { public static void main(String args[]) { Scanner sc = new Scanner(System.in); Ss s = new Ss(sc.nextInt(), sc.nextInt(), sc.nextLine()); s.display(); } } 

Quando o usuário digitar seu username , verifique se há uma input válida também.

 java.util.Scanner input = new java.util.Scanner(System.in); String userName; final int validLength = 6; // This is the valid length of an user name System.out.print("Please enter the username: "); userName = input.nextLine(); while(userName.length() < validLength) { // If the user enters less than validLength characters // ask for entering again System.out.println( "\nUsername needs to be " + validLength + " character long"); System.out.print("\nPlease enter the username again: "); userName = input.nextLine(); } System.out.println("Username is: " + userName); 

Aqui está a class completa que realiza a operação necessária:

 import java.util.Scanner; public class App { public static void main(String[] args) { Scanner input = new Scanner(System.in); final int valid = 6; Scanner one = new Scanner(System.in); System.out.println("Enter your username: "); String s = one.nextLine(); if (s.length() < valid) { System.out.println("Enter a valid username"); System.out.println( "User name must contain " + valid + " characters"); System.out.println("Enter again: "); s = one.nextLine(); } System.out.println("Username accepted: " + s); Scanner two = new Scanner(System.in); System.out.println("Enter your age: "); int a = two.nextInt(); System.out.println("Age accepted: " + a); Scanner three = new Scanner(System.in); System.out.println("Enter your sex: "); String sex = three.nextLine(); System.out.println("Sex accepted: " + sex); } } 

Você pode fluir este código:

 Scanner obj= new Scanner(System.in); String s = obj.nextLine(); 

Você pode usar a class Scanner em Java

 Scanner scan = new Scanner(System.in); String s = scan.nextLine(); System.out.println("String: " + s); 

Existe uma maneira simples de ler o console.

Por favor, encontre o código abaixo:

 import java.util.Scanner; public class ScannerDemo { public static void main(String[] args) { Scanner sc = new Scanner(System.in); // Reading of Integer int number = sc.nextInt(); // Reading of String String str = sc.next(); } } 

Para uma compreensão detalhada, por favor consulte os documentos abaixo.

Doc

Agora vamos falar sobre o entendimento detalhado da class Scanner trabalhando:

 public Scanner(InputStream source) { this(new InputStreamReader(source), WHITESPACE_PATTERN); } 

Esse é o construtor para criar a instância do Scanner.

Aqui estamos passando a referência InputStream que não é senão um System.In . Aqui ele abre o InputStream Pipe para input do console.

 public InputStreamReader(InputStream in) { super(in); try { sd = StreamDecoder.forInputStreamReader(in, this, (String)null); // ## Check lock object } catch (UnsupportedEncodingException e) { // The default encoding should always be available throw new Error(e); } } 

Passando o System.in este código irá abrir o soquete para leitura do console.