2011-11-23 177 views
11

運行(看似簡單)的代碼時,我收到了一些奇怪的輸出。下面是我有: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的值?

回答

20

您將獲得Scanner對象本身返回的toString()值,這不是您想要的值,也不是您如何使用Scanner對象。你想要的是通過 Scanner對象獲得的數據。例如,

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

請閱讀教程如何使用它,因爲它會解釋所有。

編輯
請看這裏:Scanner tutorial

也有看看Scanner API這將解釋一些掃描儀的方法和屬性的細節問題。

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

將其更改爲

String s = input.next(); 

可能這就是你想幹什麼。

2

這是更容易得到你想要的東西:

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

您打印的錯誤值。相反,如果您打印掃描儀對象的字符串。試試這個

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

您還可以使用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

爲什麼要使用一個BufferedReader代替掃描儀的?使用掃描儀對象有什麼問題? –

+0

@HovercraftFullOfEels確實。我重申了我的答案,以反映這只是另一種選擇。 –

+0

同意。 up-vote 1+ –