Dieser Artikel basiert auf der Motivation der anderen Macht: "Ich kenne die besten Praktiken nicht gut. Wenn Sie sie also vorerst in Qiita schreiben, wird Ihnen eine detaillierte Person sagen", anstatt "die besten Praktiken selbst zu zeigen". Masu (´ ´ ω ・ `) Ein Test, der versucht, am kollektiven Wissen des Internets festzuhalten.
Erstens ist derjenige, der BufferedReader verwendet, häufig in Blog-Artikeln im Internet zu finden.
var stdin = new BufferedReader(new InputStreamReader(System.in));
//Lesen Sie die Standardeingabe Zeile für Zeile.
String line;
while ((line = stdin.readLine()) != null) {
doSomething(line);
}
//Wenn der von der Standardeingabe angegebene Wert ein numerischer Wert ist, muss er selbst konvertiert werden.
while ((line = stdin.readLine()) != null) {
int i = Integer.valueOf(line);
doSomething(i);
}
//Einfach zum Streamen zu verbinden.
stdin.lines().forEach(System.out::println);
stdin.lines().mapToInt(Integer::valueOf);
Um die Vor- und Nachteile dieser Methode kurz zusammenzufassen:
Persönlich gesehen verwenden 90% der Wettbewerbsprogramme Standardeingaben in Java. Kurz gesagt, es gibt viele Fälle, in denen Sie ein wenig schreiben und ein wenig verschieben möchten. In der Wettbewerbsprogrammierung ist es auch üblich, ein Eingabeformat wie "Die erste Zeile ist ein numerischer Wert und die zweite und nachfolgende Zeile sind Zeichenketten" zu verwenden. In solchen Fällen ist es erforderlich, verschiedene Arten von Eingaben schnell zu verarbeiten. In solchen Fällen finde ich den Scanner oft bequemer.
var stdin = new Scanner(System.in);
//Lesen Sie die Standardeingabe Zeile für Zeile.
while (stdin.hasNextLine()) {
var line = stdin.nextLine();
doSomething(line);
}
//Zum Beispiel, wenn Sie die folgende Eingabe haben---> 1000 10.005 HOGE
//Selbst solch eine komplizierte Eingabe ist relativ einfach zu verarbeiten.
int i = stdin.nextInt();
double d = stdin.nextDouble();
String s = stdin.nextLine();
//Es ist etwas schwierig, eine Verbindung zu Stream herzustellen. Um mapToObj usw. verwenden zu können, ist ein gewisser Einfallsreichtum erforderlich.
stdin.forEachRemaining(System.out::println);
Auch hier werde ich die Vor- und Nachteile zusammenfassen.
Auf diese Weise zu schreiben, scheint (natürlich) beide Vor- und Nachteile zu haben. Letzteres ist für ein wenig Programmieren auf Skriptebene einfacher, aber Ersteres ist definitiv moderner. Ersteres scheint in der praktischen Programmierung zu übernehmen (´ ・ ω ・ `)
Recommended Posts