2014-03-29 159 views
1

我是Java的新手,我試圖從多行輸入中獲取字符串。從Java輸入中獲取字符串

例如字符串=「敏捷的棕色狐狸跳過懶狗敏捷的棕色狐狸跳過懶狗快速狐狸躍過懶狗。」從輸入,就像這樣:

敏捷的棕色狐狸跳過那隻懶惰的狗。

快速的棕色狐狸跳過懶惰的狗。

快速的棕色狐狸跳過懶惰的狗。

我試圖使用帶有.nextLine(while循環)這樣

String s=""; 
Scanner Input = new Scanner (System.in); 

while(Input.hasNextLine()){ 
    s = s + Input.nextLine() + " "; 
} 

但環只是看似無限延伸。感謝您提供任何幫助。

+0

需要有一個更好的退出,如果你按下Ctrl-Z程序不能得到更多的處理/程序將退出。添加一些System.out.printlns ...看到我編寫的第二個示例,並可以運行 – tgkprog

回答

3

您必須按Ctrl鍵+ž(或按Ctrl +UNIX d),以表明不會有更多的投入。

+0

爲什麼這是downvoted?這是非常正確的答案! – Seelenvirtuose

+1

同意,如果OP在控制檯上運行這個類,這是正確的答案。如果他用一個文件('java ClassName

+0

歡迎反饋! – Christian

0

需要結束一些標準的循環,加上你的var名稱是1個字符,這是不好的。

你的方式工程按ctrl -Z(窗口)結束循環,但我不認爲可以輸入更多的輸入標準輸入之後。

import java.util.*; 
    public class ReadStrs{ 
     public static void main(String []args){ 
      String s = ""; 
      String readStr = ""; 
      StringBuilder sb = new StringBuilder(); 
      Scanner input = new Scanner (System.in); 
      int cnt = 0; 
      //while(!(readStr = input.nextLine()).equals("end")) 
      System.out.println("Enter str " + cnt + " Or end to stop accepting strings"); 
      while(input.hasNextLine()){ 
       cnt++; 
       readStr =input.nextLine(); 

       sb.append(readStr).append(" "); 
       System.out.println("Enter str " + cnt + " Or end to stop accepting strings"); 
      }//this will go on for ever unless you have a check to break the input and start processing 
      s = sb.toString();//can manipulate sb or s now 
      System.out.println("Out of loop got :" + s + "---"); 
     } 
    } 

的另一種方法將提示用戶輸入一個特定的字符串結束輸入:

import java.util.*; 
    public class ReadStrs{ 
     public static void main(String []args){ 
      String s = ""; 
      String readStr = ""; 
      StringBuilder sb = new StringBuilder(); 
      Scanner input = new Scanner (System.in); 
      int cnt = 0; 
      while(!(readStr = input.nextLine()).equals("end")){ 
       cnt++; 
       System.out.println("Enter str " + cnt + " Or end to stop accepting strings"); 
       sb.append(readStr).append(" "); 
      }//this will go on for ever unless you have a check to break the input and start processing 
      s = sb.toString();//can manipulate sb or s now 
     } 
    } 
0

添加變量計數和增加它在每個looping.If計數滿足一些標準,則可以打破;如循環播放。

String s = ""; 
    Scanner Input = new Scanner(System.in); 
    int count = 0; 

    while (Input.hasNextLine()) { 
     if (count == 4) { 
      break; 
     } else { 
      count++; 
      s = s + Input.nextLine() + " "; 
     } 

    } 
    System.out.println(s); 
2

標準輸入流通常永遠不會結束,如果您沒有指出。你的程序如何知道,用戶沒有輸入另一行?

所以,你應該只讀的,你明確地知道將獲得進入線,這樣的:

Scanner input = new Scanner(System.in); 
String first = input.nextLine(); 
String second = input.nextLine(); 
input.close(); 
System.out.println(first); 
System.out.println(second); 

如果你想有一個可變的行數,你應該用你的while循環去,但正如Christian建議的那樣,用戶必須指出輸入的結尾。這樣的:

Scanner input = new Scanner(System.in); 
StringBuilder builder = new StringBuilder(); 
while (input.hasNext()) { 
    builder.append(input.nextLine()).append(System.lineSeparator()); 
} 
input.close(); 
System.out.println(builder.toString()); 

運行是將無限循環(貌似)。但是當按下CTRL-Z時,您將結束輸入並且input.hasNext()將返回false。 (請注意,CTRL-Z適用於Linux和Windows。)


編輯按歐文Bolwidt的評論基督教的回答:

如果要重定向標準輸入流,所以它例如從一個文件時,EOF標記(文件末尾讀取)會指示掃描儀輸入的結束。所以顯然不涉及用戶交互,程序仍然會正確運行。