2011-10-30 12 views
12

En mi programa actual, un método le pide al usuario que ingrese la descripción de un producto como una entrada String. Sin embargo, cuando más tarde intento imprimir esta información, solo se muestra la primera palabra del String. ¿Cuál podría ser la causa de esto? Mi método es el siguiente:El escáner solo lee la primera palabra en lugar de la línea

void setDescription(Product aProduct) { 
    Scanner input = new Scanner(System.in); 
    System.out.print("Describe the product: "); 
    String productDescription = input.next(); 
    aProduct.description = productDescription; 
} 

lo tanto, si la entrada del usuario es "refresco con gas con sabor a naranja", la única System.out.print rendirá "espumoso".

¡Cualquier ayuda será muy apreciada!

Respuesta

27

Reemplazar next() con nextLine():

String productDescription = input.nextLine(); 
+5

Me ganaste, 8 segundos +1 –

+0

Impresionante. ¡Muchas gracias! Esto funcionó :) – Kristian

8

Uso input.nextLine(); en lugar de input.next();

+0

Gracias. Esto funcionó como un amuleto :) – Kristian

3

El javadocs for Scanner responder a su pregunta

Un escáner rompe su entrada en tokens utilizando un patrón de delimitación, cuales de forma predeterminada coincide con el espacio en blanco.

que te pueden cambiar el patrón de espacios en blanco por defecto del escáner está utilizando haciendo algo como

Scanner s = new Scanner(); 
s.useDelimiter("\n"); 
+2

¿Por qué meterse con eso cuando nextLine() fue escrito específicamente para esta situación y resuelve todo ordenadamente? –

1

input.next() toma en la primera palabra whitsepace delimitado de la cadena de entrada. Entonces, por diseño, hace lo que has descrito. Pruebe input.nextLine().

+0

¡Muchas gracias! Funcionó ahora :) – Kristian

1

Javadoc al rescate:

Un escáner rompe su entrada en tokens utilizando un patrón de delimitación, que por defecto coincide con el espacio en blanco

nextLine es probablemente el método que debe utilizar.

Cuestiones relacionadas