web-dev-qa-db-ja.com

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

そして、正常にコンパイルした後に得られる出力は次のとおりです。

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の値を印刷するにはどうすればよいですか?

14
tekknolagi

Scannerオブジェクト自体によって返されるtoString()値を取得していますが、これは目的のものではなく、Scannerオブジェクトの使用方法でもありません。代わりに欲しいのはデータですobtained by Scannerオブジェクト。例えば、

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

すべての説明がありますので、使用方法に関するチュートリアルをお読みください。

編集
こちらをご覧ください: スキャナーチュートリアル

Scanner API もご覧ください。これにより、Scannerのメソッドとプロパティのより細かい点が説明されます。

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.");
   }
}
3
Rok Strniša
input.next();
String s = input.toString();

に変更する

String s = input.next();

それがあなたがやろうとしていたことかもしれません。

2
Bhesh Gurung

これはあなたが望むものを得る可能性が高くなります:

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

間違った値を印刷しています。代わりに、文字列がスキャナーオブジェクトを印刷する場合。これを試して

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