2017-08-20 3 views
3

J'ai déjà scanné une entrée de type int et j'essaie de prendre une deuxième entrée de type String qui a des espaces blancs au début, et lors de l'impression des deux entrées, Je veux que le second soit imprimé tel quel (avec les espaces blancs).Impression d'une entrée de chaîne à partir du scanner avec des espaces blancs

class Input{ 
    public static void main (String[] args) throws java.lang.Exception{ 

     Scanner sc=new Scanner(System.in); 
     int n=sc.nextInt(); 


     String s=sc.next(); 
     s=s+sc.nextLine(); 

     System.out.println(n); 
     System.out.println(s); 
    } 
} 

entrée:

4 
     hello world. 

attendu sortie:

4 
     hello world. 

sortie réelle:

4 
hello world. 

Répondre

4

Scanner.next() utilise le délimiteur par défaut, ce qui permettra de saisir toute séquence d'espacement. Utilisez Scanner.nextLine() à la place:

int n = sc.nextInt(); 
sc.nextLine(); // consume only the newline 
String s = sc.nextLine(); 

Ideone Demo

+0

Merci cela a fonctionné. – pradeep

1

Le délimiteur par défaut est un ou plusieurs espaces:

private static Pattern WHITESPACE_PATTERN = Pattern.compile(
               "\\p{javaWhitespace}+"); 

Alors sc.next() produit "hello" et sc.nextLine() qui lit le reste de la ligne actuelle produit "world".

Vous pouvez définir un caractère breakline comme séparateur pour la deuxième entrée et retirez

s = s + sc.nextLine(); qui ne doit plus longtemps:

... 
sc.useDelimiter(System.lineSeparator()); 
String s = sc.next(); 
0

Utilisez sc.nextLine() au lieu de la prochaine(). car pour nextLine(), le jeton à lire est la ligne entière et pour next(), le jeton à lire est le mot suivant.

-2
import java.util.*; 
class Input{ 
    public static void main(String[] main){ 
     Scanner sc=new Scanner(System.in); 
     int n=sc.nextInt(); 
     sc=new Scanner(System.in); 
     String s=sc.nextLine(); 
     System.out.println(n); 
     System.out.println(s); 
    } 
} 
+0

Bienvenue. Vous devriez ajouter une brève explication dans votre commentaire –