2014-12-19 64 views
-1

所以,我有兩個類:Java的級聯通過CMD輸入

class ConcatTesting{ 
    public static void main(String args[]) throws java.io.IOException{ 
     char inLetter; 
     String input=""; 

     //This loops takes line of cmd and makes the input variable into that string 
     for(;;){ 
      inLetter=(char) System.in.read(); //get next char 

      //if the line hasn't ended then add that char to input 
      if(inLetter!='\n'){ 
       input+=String.valueOf(inLetter); 
      }else{ 
       //other wise line has ended so input is finished 
       break; 
      } 
     } 

     //removes extra white-spaces 
     input.trim(); 

     //test what input is to make sure it is working correctly 
     System.out.println(input); 

     //test concat function 
     UseConcat.ask(input); 

     UseConcat.ask("pie"); 
    } 
} 

class UseConcat{ 
    public static void ask(String str){ 
     System.out.println("What does " + str +" mean?"); 
    } 
} 

在節目中我調用靜態方法UseConcat.ask(String str)兩次。

UseConcat.ask(String str)中的參數是input變量時,連接似乎失敗。但是,當我調用UseConcat.ask(String str)並且參數是一個隨機字符串時,連接起作用。

input變量是cmd轉換爲字符串的第一行寫入的行。

這是一個示例圖像。

Example Image

作爲圖像中所示,輸入變量被設置爲WOA。

然而UseConcat.ask(input);打印出意思?OES WOA的 intsead是什麼WOA是什麼意思?

當輸入打印時:System.out.println(input);它正常打印WOA

另一方面當我打電話UseConcat.ask("pie");它的工作和打印:餡餅是什麼意思?在Windows

+0

爲什麼不使用'Scanner'來捕獲用戶輸入? – 2014-12-19 00:06:46

+0

@RyanJ似乎與掃描儀一起工作,但爲什麼它目前如何做呢? – Zachooz 2014-12-19 00:13:50

+1

我可以告訴你它與終端的行爲有關,而不是特定的代碼。它使用帶終端仿真的IDE工作。我懷疑你正在被什麼[這篇文章](http://stackoverflow.com/questions/4007534/why-cant-we-read-one-character-at-a-time-from-system-在)中描述。儘管如此,我建議切換到「Scanner」,因爲它更強健一些,更符合當前的實踐。 – 2014-12-19 00:24:24

回答

0

文本行(通常是文件,但始終是控制檯窗口)與結束字符CR(回車)和LF(換行),這是(最容易)用Java編寫的\r\n。您只刪除LF,然後輸出「WOA {CR}是什麼意思?」並且{CR}字符將光標移動到左邊距並導致「意味着什麼?」部分來覆蓋「What d」部分。如果你沒有丟棄結果,你的input.trim()會解決這個問題。其他平臺不同; Unix只使用LF,而AIUI MacOSX只使用CR。

設計用於處理文本的Java方法,如Scanner或更基本的BufferedReader.readLine()爲您處理CR和LF的任意組合,並且應用程序中的代碼更少,效率更高;反覆做String + =字母對於長時間輸入來說效率非常低 - 儘管如果你僅在控制檯窗口中運行該程序,該窗口會將輸入行限制爲一些不是非常巨大的數量。