Cet article est basé sur la motivation de cette application, plutôt que de "montrer les meilleures pratiques par vous-même", "je ne connais pas bien les meilleures pratiques, donc si vous l'écrivez dans Qiita pour le moment, une personne détaillée vous le dira". Masu (´ ・ ω ・ `) Un test qui tente de s'accrocher à la connaissance collective d'Internet.
Tout d'abord, celui qui utilise BufferedReader se retrouve souvent dans les articles de blog sur Internet.
var stdin = new BufferedReader(new InputStreamReader(System.in));
//Lisez l'entrée standard ligne par ligne.
String line;
while ((line = stdin.readLine()) != null) {
doSomething(line);
}
//Si la valeur donnée par l'entrée standard est une valeur numérique, elle doit être convertie d'elle-même.
while ((line = stdin.readLine()) != null) {
int i = Integer.valueOf(line);
doSomething(i);
}
//Facile à connecter pour diffuser.
stdin.lines().forEach(System.out::println);
stdin.lines().mapToInt(Integer::valueOf);
Pour résumer brièvement les avantages et les inconvénients de cette méthode,
--Facile à trouver des échantillons sur le net. Cet "échantillon riche" n'est pas surprenant dans la programmation pratique. ――Cependant, par rapport à Scanner, qui sera décrit plus tard, il existe plus de types, et la programmation au niveau des scripts est un peu gênante. ――Il est difficile de dire que c'est beau même si vous le comprenez quand vous écrivez deux fois le constructeur (´ ・ ω ・ `) --Facile à se connecter à Stream introduit à partir de Java8.
À propos, personnellement, 90% de la programmation de la concurrence utilise une entrée standard en Java. Bref, il existe de nombreux cas où vous souhaitez écrire un peu et le déplacer un peu. En outre, il est courant dans la programmation de compétition d'utiliser un format d'entrée tel que "la première ligne est une valeur numérique, et la deuxième ligne et les suivantes sont des chaînes de caractères." Dans de tels cas, il est nécessaire de traiter rapidement divers types d'entrée. Dans de tels cas, je pense que le scanner est souvent plus pratique.
var stdin = new Scanner(System.in);
//Lisez l'entrée standard ligne par ligne.
while (stdin.hasNextLine()) {
var line = stdin.nextLine();
doSomething(line);
}
//Par exemple, si vous avez l'entrée suivante---> 1000 10.005 HOGE
//Même une entrée aussi compliquée est relativement facile à traiter.
int i = stdin.nextInt();
double d = stdin.nextDouble();
String s = stdin.nextLine();
//Il est un peu difficile de se connecter à Stream. Afin d'utiliser mapToObj etc., une certaine ingéniosité est requise.
stdin.forEachRemaining(System.out::println);
Ici aussi, je résumerai les avantages et les inconvénients.
En écrivant de cette façon, les deux semblent avoir des avantages et des inconvénients (naturellement). Ce dernier est plus facile pour une petite programmation au niveau du script, mais le premier est nettement plus moderne. Il semble bon d'adopter le premier dans la programmation pratique (´ ・ ω ・ `)
Recommended Posts