2011-11-23 12 views
11

Obtengo una salida extraña al ejecutar código (aparentemente simple). Aquí es lo que tengo:variable de cadena de impresión java

import java.util.Scanner; 

public class TestApplication { 
    public static void main(String[] args) { 
    System.out.println("Enter a password: "); 
    Scanner input = new Scanner(System.in); 
    input.next(); 
    String s = input.toString(); 
    System.out.println(s); 
    } 
} 

Y la salida consigo después de compilar con éxito es:

Enter a password: 
hello 
java.util.Scanner[delimiters=\p{javaWhitespace}+][position=5][match valid=true][need input=false][source closed=false][skipped=false][group separator=\,][decimal separator=\.][positive prefix=][negative prefix=\Q-\E][positive suffix=][negative suffix=][NaN string=\Q�\E][infinity string=\Q∞\E] 

que es una especie de extraño. ¿Qué sucede y cómo imprimo el valor de s?

Respuesta

20

Obtiene el valor toString() devuelto por el objeto Scanner en sí que no es el que desea y no el uso que hace de un objeto Scanner. Lo que desea en su lugar es los datos obtenidos por el objeto Escáner. Por ejemplo,

Scanner input = new Scanner(System.in); 
String data = input.nextLine(); 
System.out.println(data); 

Por favor, lea el tutorial sobre cómo usarlo, ya que le explicará todo.

Editar
Por favor, mira aquí: Scanner tutorial

también echar un vistazo a la Scanner API que explicará algunos de los puntos más finos de métodos y propiedades del escáner.

2
input.next(); 
String s = input.toString(); 

cambio a

String s = input.next(); 

Puede ser que eso es lo que estaba tratando de hacer.

2

Esto es más probable conseguir lo que quiere:

Scanner input = new Scanner(System.in); 
String s = input.next(); 
System.out.println(s); 
2

Está imprimiendo el valor incorrecto. En cambio, si la cadena imprime los objetos del escáner. Prueba este

Scanner input = new Scanner(System.in); 
String s = input.next(); 
System.out.println(s); 
2

También podría usar BufferedReader:

import java.io.*; 

public class TestApplication { 
    public static void main (String[] args) { 
     System.out.print("Enter a password: "); 
     BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); 
     String password = null; 
     try { 
     password = br.readLine(); 
     } catch (IOException e) { 
     System.out.println("IO error trying to read your password!"); 
     System.exit(1); 
     } 
     System.out.println("Successfully read your password."); 
    } 
} 
+2

Por qué utilizar un BufferedReader en lugar de escáner? ¿Qué pasa con el uso de un objeto Scanner? –

+0

@HovercraftFullOfEels De hecho. Reformé mi respuesta para reflejar que es solo otra opción. –

+0

De acuerdo. hasta-voto 1+ –