Tekenreeksvariabele afdrukken in Java

Ik krijg een vreemde uitvoer bij het uitvoeren van (schijnbaar eenvoudige) code. Dit is wat ik heb:

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

En de output die ik krijg na succesvol compileren is:

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]

Wat een beetje raar is. Wat gebeurt er en hoe druk ik de waarde van saf?


Antwoord 1, autoriteit 100%

U krijgt de waarde toString()geretourneerd door het Scanner-object zelf, wat niet is wat u wilt en niet hoe u een Scanner-object gebruikt. In plaats daarvan wilt u de gegevens verkregen doorhet Scanner-object. Bijvoorbeeld,

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

Lees de tutorial over het gebruik ervan, want daarin wordt alles uitgelegd.

Bewerken
Kijk hier: Scannerhandleiding

Bekijk ook de Scanner-APIwaarin enkele van de finesses van de methoden en eigenschappen van Scanner worden uitgelegd.


Antwoord 2, autoriteit 11%

U kunt ook BufferedReadergebruiken:

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

Antwoord 3, autoriteit 7%

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

wijzig het in

String s = input.next();

Misschien is dat wat je probeerde te doen.


Antwoord 4, autoriteit 7%

De kans is groter dat je krijgt wat je wilt:

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

Antwoord 5, autoriteit 7%

U drukt de verkeerde waarde af. In plaats daarvan als de tekenreeks die u afdrukt het scannerobject. Probeer dit

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

Antwoord 6

Als je alle andere antwoorden hebt geprobeerd en het nog steeds niet werkt, kun je proberen een regel over te slaan:

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

Other episodes