Печать строковой переменной в Java - PullRequest
14 голосов
/ 24 ноября 2011

Я получаю какой-то странный вывод при запуске (на первый взгляд, простого) кода. Вот что у меня есть:

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);
  }
}

И вывод, который я получаю после успешной компиляции:

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]

Что странно. Что происходит и как мне распечатать значение s?

Ответы [ 6 ]

23 голосов
/ 24 ноября 2011

Вы получаете значение toString(), возвращаемое самим объектом Scanner, которое отличается от того, что вы хотите, и от того, как вы используете объект Scanner. Вместо этого вам нужны данные , полученные объектом Сканера. Например,

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

Пожалуйста, прочитайте учебник о том, как его использовать, так как он все объяснит.

Редактировать
Пожалуйста, посмотрите здесь: Учебное пособие по сканеру

Также взгляните на Scanner API , который объяснит некоторые тонкости методов и свойств сканера.

3 голосов
/ 24 ноября 2011

Вы также можете использовать 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 голосов
/ 24 ноября 2011

Вы печатаете неправильное значение. Вместо строки если вы печатаете объект сканера. Попробуйте это

Scanner input = new Scanner(System.in);
String s = input.next();
System.out.println(s);
2 голосов
/ 24 ноября 2011

Скорее всего, вы получите то, что хотите:

Scanner input = new Scanner(System.in);
String s = input.next();
System.out.println(s);
2 голосов
/ 24 ноября 2011
input.next();
String s = input.toString();

измените его на

String s = input.next();

Может быть, именно это вы пытались сделать.

0 голосов
/ 10 июня 2018

Если вы пробовали все остальные ответы, но они все еще не работают, вы можете попробовать пропустить строку:

Scanner scan = new Scanner(System.in);
scan.nextLine();
String s = scan.nextLine();
System.out.println("String is " + s);
...