Die Java.util.Scanner -Klasse ist eine einfache Text -Scan -Klasse, die grundlegende Datentypen und Zeichenfolgen analysiert. Es verwendet im Wesentlichen regelmäßige Ausdrücke, um verschiedene Datentypen zu lesen.
Um Charaktersequenzen effizient zu lesen, liest die Klasse java.io.bufferedReader Text aus Zeicheneingangsströmen und Zeichenpuffern.
Hier sind die Unterschiede zwischen den beiden Klassen:
Was ist das Problem bei der Verwendung der Scannerklasse, wenn Nextline () in NextXXX () verwendet wird?
Versuchen Sie, die Ausgabe des folgenden Codes zu erraten.
// Code mit Scanner Classimport java.util.scanner; Klasse differenz {public static void main (String args []) {scanner scn = new scanner (System.in); System.out.println ("Ein Integer eingeben"); scn.nextline (); System.out.printf ("Sie haben eingegeben:-" + a + "" + "und nennen Sie" + b);}}Eingang:
50
Geek
Ausgabe:
Geben Sie eine Ganzzahl ein
Geben Sie eine Zeichenfolge ein
Sie haben eingegeben:- 50 und Name als
Versuchen wir, die BufferReader -Klasse zu verwenden und die gleiche Eingabe zu verwenden
// Code mit BufferedReader Classimport java.io.*; Klasse differenz {public static void main (String args []) löst IOException aus {bufferedReader bR = new bufferedReader (newInputStreamReader (System.in)). Integer.ParseInt (Br.Readline ()); System.out.println ("eine String eingeben"); String B = Br.Readline (); System.out.printf ("Sie haben eingegeben:-" + a + "und Name" + B);}} Eingang:
50
Geek
Ausgabe:
Geben Sie eine Ganzzahl ein
Geben Sie eine Zeichenfolge ein
Sie haben eingegeben:- 50 und nennen Sie als Geek
Wenn wir in der Scannerklasse die NextLine () -Methode nach einer 7. -Nextxxx () -Methode aufrufen, kann die NextLine () -Methode nichts von der Konsole lesen, und dieser Cursor wird nicht die Konsole eingeben, und überspringt diesen Schritt. Die NextXXX () -Methoden sind diese Methoden, NextInt (), Nextfloat (), NextByte (), NextShort (), NextDouble (), Nextlong (), Next ().
Es gibt kein solches Problem in der Bufferader -Klasse. Dieses Problem tritt nur in der Scannerklasse auf, da die NextXXX () -Methode das neue Zeichen des Zeichens ignoriert, aber Nextline () ignoriert es nicht. Wenn wir mehr als eine Nextline () -Methode zwischen der Methode von NextXXXX () und der Nextline () -Methode verwenden, tritt dieses Problem nicht auf. Denn NextLine () konsumiert Newline -Charaktere. Sie können sich auf die richtige Art und Weise verweisen, dieses Programm zu schreiben (http://code.geeksforgeeks.org/cerahd). Dieses Problem entspricht der Methode scanf () in C/C ++ (http://www.geeksforgeks.org/problem-with-scanf-when-here-is-fgetsgetsScanf-after-it/), die der Get () -Methode folgt.
Andere Unterschiede:
• BufferedReader unterstützt die Synchronisation, während der Scanner dies nicht tut. Wenn wir uns mit Multithread -Programmen befassen, sollte der BufferedReader verwendet werden.
• BufferedReader verfügt über einen ausreichenden Pufferspeicher im Vergleich zum Scanner.
• Der Scanner hat nur sehr wenige Puffer (1 KB -Zeichenpufferung) im Vergleich zu BufferedReader (8 KB -Byte -Pufferung), dies ist jedoch mehr als genug.
• BufferedReader ist etwas schneller als der Scanner, da der Scanner die Analyse von Eingabedaten der Klasse durchführt, während BufferedReader einfach die Zeichenfolge der Zeichen liest.
Das obige ist der Unterschied zwischen der Scannerklasse und der Bufferreader -Klasse in Java, die Ihnen vom Editor vorgestellt wurden (sehr detailliert). Ich hoffe, es wird Ihnen hilfreich sein. Wenn Sie Fragen haben, hinterlassen Sie mir bitte eine Nachricht und der Editor wird Ihnen rechtzeitig antworten. Vielen Dank für Ihre Unterstützung auf der Wulin.com -Website!