J'écris un programme qui permet à l'utilisateur de saisir ses données puis de les sortir. Son 3/4 est correct mais quand il arrive à la sortie de l'adresse, il n'imprime qu'un mot. Disons seulement 'Archevêque' de 'Archbishop Street' Comment puis-je réparer ça?
import Java.util.*;
class MyStudentDetails{
public static void main (String args[]){
Scanner s = new Scanner(System.in);
System.out.println("Enter Your Name: ");
String name = s.next();
System.out.println("Enter Your Age: ");
int age = s.nextInt();
System.out.println("Enter Your E-mail: ");
String email = s.next();
System.out.println("Enter Your Address: ");
String address = s.next();
System.out.println("Name: "+name);
System.out.println("Age: "+age);
System.out.println("E-mail: "+email);
System.out.println("Address: "+address);
}
}
Cette approche fonctionne, mais je ne sais pas comment, peut-on expliquer, comment ça marche ...
String s = sc.next();
s += sc.nextLine();
Initialisez le scanner de cette manière afin qu'il délimite l'entrée à l'aide d'un nouveau caractère de ligne.
Scanner sc = new Scanner(System.in).useDelimiter("\\n");
Référez-vous au JavaDoc pour plus de détails
Utilisez sc.next () pour obtenir la ligne entière dans une chaîne
J'utiliserais Scanner#nextLine
opposé à next
pour votre attribut address
.
Cette méthode retourne le reste de la ligne en cours, en excluant tout séparateur de ligne à la fin.
Comme cela retourne la ligne entière, délimitée par un séparateur de ligne, cela permettra à l'utilisateur de saisir n'importe quelle adresse sans contrainte.
Le délimiteur par défaut du scanner est un espace. Vérifiez javadoc pour savoir comment changer cela.
String s="Hi";
String s1="";
//For Reading Line by hasNext() of scanner
while(scan.hasNext()){
s1 = scan.nextLine();
}
System.out.println(s+s1);
/*This Worked Fine for me for reading Entire Line using Scanner*/
Au lieu d'utiliser System.in
et System.out
directement, utilisez la commande Console
class - elle vous permet d'afficher une invite et de lire une ligne entière (corrigeant ainsi votre problème) d'entrées:
String address = System.console().readLine("Enter your Address: ");
import Java.util.Scanner;
public class Solution {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
int i = scan.nextInt();
double d = scan.nextDouble();
String s="";
while(scan.hasNext())
{
s=scan.nextLine();
}
System.out.println("String: " +s);
System.out.println("Double: " + d);
System.out.println("Int: " + i);
}
}
Nous pouvons facilement utiliser scan.nextLine. Il lira le reste de l’entrée jusqu’à la fin. Puis assignez-le à votre variable. La phrase entière peut être imprimée facilement . Voici l'exemple pour une meilleure compréhension.
String s = "HackerRank ";
Scanner scan = new Scanner(System.in);
String s2;
scan.nextLine(); // read the rest of the line of input (newline character after the double token).
s2 = scan.nextLine();
/* Concatenate and print the String variables on a new line integer variables on a new line;
System.out.println(s + s2);
scan.close();
} }
next()
peut lire l'entrée uniquement jusqu'à l'espace. Il ne peut pas lire deux mots séparés par un espace. De plus, next()
place le curseur sur la même ligne après la lecture de l'entrée.
nextLine()
lit l'entrée, y compris l'espace entre les mots (c'est-à-dire jusqu'à la fin de la ligne \n
). Une fois l’entrée lue, nextLine()
positionne le curseur sur la ligne suivante.
pour lire toute la ligne, vous pouvez utiliser nextLine()
J'ai essayé de suivre le code mais cela ne s'arrête pas car il n'y a pas de condition de pause, donc il attend toujours l'entrée, peut-être pourriez-vous ajouter une condition de pause
public class Solution {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
int i = scan.nextInt();
double d = scan.nextDouble();
String s="";
while(scan.hasNext())
{
s=scan.nextLine();
}
System.out.println("String: " +s);
System.out.println("Double: " + d);
System.out.println("Int: " + i);
}
}
import Java.util.Scanner;
public class Solution {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
String s = scan.next();
s += scan.nextLine();
System.out.println("String: " + s);
}
}
Vous trouverez ci-dessous un exemple de code permettant de lire une ligne dans l'entrée Standard à l'aide de la classe Java Scanner.
import Java.util.Scanner;
public class Solution {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
String s = scan.nextLine();
System.out.println(s);
scan.close();
}
}
Contribution:
Bonjour le monde
Sortie:
Bonjour le monde
"il n'imprime qu'un mot. Disons seulement" Archevêque "de" Rue Archevêque "
Il n’imprime que Word car les fonctions du scanner telles que next (), nextInt (), etc. ne lisent qu’un jeton à la fois. Ainsi, cette fonction lit et retourne le prochain jeton.
For example if you have: x y z
s.next() will return x
s.nextLine() y z
Revenons à votre code si vous voulez lire toute la ligne "Archbishop Street"
String address = s.next(); // s = "Archbishop"
Then address += s.nextLine(); // s = s + " Street"
J'ai défini le délimiteur de jeton comme étant un motif de nouvelle ligne, lu le jeton suivant, puis remis le délimiteur à sa place.
public static String readLine(Scanner scanner) {
Pattern oldDelimiter = scanner.delimiter();
scanner.useDelimiter("\\r\\n|[\\n\\x0B\\x0C\\r\\u0085\\u2028\\u2029]");
String r = scanner.next();
scanner.useDelimiter(oldDelimiter);
return r;
}
le code ci-dessous devrait faire ce que vous cherchez:
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
String s = scan.nextLine();
System.out.println(s);
scan.close();
}
Pour obtenir l'adresse complète, ajoutez
s.nextLine();//read the rest of the line as input
avant
System.out.println("Enter Your Address: ");
String address = s.next();