Lire l'entrée standard en Java

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

Lire l'entrée standard en Java
Lire JSON en Java
Lire des fichiers binaires en Java 1
Lire des fichiers binaires dans Java 2
Réception d'entrée très simple en Java
Lire le fichier de propriétés Java en C #
Lire CSV en Java (annotation Super CSV)
Histoire de paiza.jp [solution d'entrée standard Java]
Partition en Java
Changements dans Java 11
[Java] Utiliser la technologie cryptographique avec les bibliothèques standard
Janken à Java
Recevoir une entrée de joystick dans Java LW JFL
Enregistreur standard Java
Lire Felica en utilisant RC-S380 (PaSoRi) en Java
Lire le fichier xlsx en Java avec Selenium
Entrée de la console en Java (comprendre le mécanisme)
Taux circonférentiel à Java
FizzBuzz en Java
Entrée standard Ruby
Lire une chaîne dans un fichier PDF avec Java
Ajouter, lire et supprimer des commentaires Excel à l'aide de Java
[Java] Lire les fichiers dans src / main / resources
Implémentation de l'interpréteur par Java
Application Janken en Java
Programmation par contraintes en Java
Mettez java8 dans centos7
NVL-ish guy en Java
Joindre des tableaux en Java
"Hello World" en Java
Lire le fichier de propriétés Java
Interface appelable en Java
interface de type de fonction standard java
Commentaires dans la source Java
Formater XML en Java
Simple htmlspecialchars en Java
Implémentation Boyer-Moore en Java
Lire la source Java HashMap
Hello World en Java
Utiliser OpenCV avec Java
Mémorandum WebApi avec Java
Détermination de type en Java
Exécuter des commandes en Java (ping)
Divers threads en java
Implémentation du tri de tas (en java)
API Zabbix en Java
Art ASCII à Java
Comparer des listes en Java
POST JSON en Java
Exprimer l'échec en Java
Créer JSON en Java
Manipulation de la date dans Java 8
Nouveautés de Java 8
Utiliser PreparedStatement en Java
Nouveautés de Java 9,10,11
Exécution parallèle en Java
entrée de boucle du scanner java