logo

Hur tar man input från användaren i Java?

Java tar med olika strömmar med sitt I/O-paket som hjälper användaren att utföra alla Java input-output operationer. Dessa strömmar stöder alla typer av objekt, datatyper, tecken, filer etc. för att fullständigt utföra I/O-operationerna. Inmatning i Java kan ske med vissa metoder som nämns nedan i artikeln.

Metoder för att ta indata i Java

Det finns två sätt genom vilken vi kan ta Java-indata från användaren eller från en fil



  • Bufferad Reader Class
  • Skannerklass

1. Använda BufferedReader Class för stränginmatning i Java

Det är en enkel klass som används för att läsa en sekvens av tecken. Den har en enkel läsfunktion som läser ett tecken, en annan läsning som läser en uppsättning tecken och en readLine() funktion som läser en rad.

InputStreamReader() är en funktion som omvandlar indataströmmen av bytes till en ström av tecken så att den kan läsas som BufferedReader förväntar sig en ström av karaktärer. BufferedReader kan kasta markerade undantag.

Nedan är implementeringen av ovanstående tillvägagångssätt:



Java
// Java Program for taking user // input using BufferedReader Class import java.io.*; class GFG {  // Main Method  public static void main(String[] args)  throws IOException  {  // Creating BufferedReader Object  // InputStreamReader converts bytes to  // stream of character  BufferedReader bfn = new BufferedReader(  new InputStreamReader(System.in));  // String reading internally  String str = bfn.readLine();  // Integer reading internally  int it = Integer.parseInt(bfn.readLine());  // Printing String  System.out.println('Entered String : ' + str);  // Printing Integer  System.out.println('Entered Integer : ' + it);  } }>

Produktion

Mayank Solanki 888 Entered String : Mayank Solanki Entered Integer : 888>

Använda Buffer Reader Class för att läsa indata

Nedan är implementeringen av ovanstående tillvägagångssätt:

Java
/*package whatever //do not write package name here */ import java.io.*; import java.io.BufferedReader; import java.io.InputStreamReader; class Easy {  public static void main(String[] args)  {  // creating the instance of class BufferedReader  BufferedReader reader = new BufferedReader(  new InputStreamReader(System.in));  String name;  try {  System.out.println('Enter your name');  name = reader.readLine(); // taking string input  System.out.println('Name=' + name);  }  catch (Exception e) {  }  } }>

Produktion:



Enter your name: Geeks Name=Geeks>

2. Använda skannerklass för att ta indata i Java

Det är en avancerad version av BufferedReader som lades till i senare versioner av Java. Skannern kan läsa formaterad indata. Den har olika funktioner för olika typer av datatyper.

  • Skannern är mycket lättare att läsa eftersom vi inte behöver skriva kast eftersom det inte finns något undantag från den.
  • Det lades till i senare versioner av Java
  • Den innehåller fördefinierade funktioner för att läsa ett heltal, tecken och andra datatyper också.

Syntax för skannerklass

Scanner scn = new Scanner(System.in);>

Importera skannerklass

' För att använda Scannern måste vi importera Scanner-klassen från util-paketet as

import java.util.Scanner;>

Inbyggda skannerfunktioner är följande:

  • Heltal: nextInt()
  • Flyta: nextFloat()
  • Sträng : next() och nextLine()

Därför, i fallet med heltal och sträng i skanner, kräver vi inte analys som vi krävde i BufferedReader.

Java
// Java Program to show how to take // input from user using Scanner Class import java.util.*; class GFG {  public static void main(String[] args)  {  // Scanner definition  Scanner scn = new Scanner(System.in);  // input is a string ( one word )  // read by next() function  String str1 = scn.next();  // print String  System.out.println('Entered String str1 : ' + str1);  // input is a String ( complete Sentence )  // read by nextLine()function  String str2 = scn.nextLine();  // print string  System.out.println('Entered String str2 : ' + str2);  // input is an Integer  // read by nextInt() function  int x = scn.nextInt();  // print integer  System.out.println('Entered Integer : ' + x);  // input is a floatingValue  // read by nextFloat() function  float f = scn.nextFloat();  // print floating value  System.out.println('Entered FloatValue : ' + f);  } }>

Utgång:

Entered String str1 : Geeks Entered String str2 : Geeks For Geeks Entered Integer : 123 Entered FloatValue : 123.090>

Exempel 2:

Java
// Java Program to implement // Scanner Class to take input import java.io.*; import java.util.Scanner; // Driver Class class Easy {  // main function  public static void main(String[] args)  {  // creating the instance of class Scanner  Scanner obj = new Scanner(System.in);  String name;  int rollno;  float marks;  System.out.println('Enter your name');  // taking string input  name = obj.nextLine();  System.out.println('Enter your rollno');  // taking integer input  rollno = obj.nextInt();  System.out.println('Enter your marks');  // taking float input  marks = obj.nextFloat();    // printing the output  System.out.println('Name=' + name);  System.out.println('Rollno=' + rollno);  System.out.println('Marks=' + marks);  } }>

Produktion

Enter your name Geeks  Enter your rollno 5 Enter your marks 84.60 Name=Geeks  Rollno=5 Marks=84.60>

Skillnader mellan BufferedReader och Scanner

  • BufferedReader är ett mycket grundläggande sätt att läsa indata som vanligtvis används för att läsa teckenströmmen. Det ger en fördel gentemot Scanner eftersom det är snabbare än Scanner eftersom Scanner gör massor av efterbearbetning för att analysera indata; som ses i nextInt(), nextFloat()
  • BufferedReader är mer flexibel eftersom vi kan specificera storleken på strömingången som ska läsas. (I allmänhet är det där BufferedReader läser större indata än Scanner)
  • Dessa två faktorer spelar in när vi läser större input. I allmänhet tjänar skannerklassen indata.
  • BufferedReader är att föredra eftersom den är synkroniserad. När du hanterar flera trådar är det att föredra.
  • För anständig input och enkel läsbarhet. Scannern är att föredra framför BufferedReader.