2013-09-01 227 views
-2

我需要在java程序中將10000個字符的字符串作爲用戶的輸入。但是,當我使用正常的方式,它會在ideone和spoj中產生NZEC錯誤。我怎樣才能把這樣一個字符串作爲輸入?如何在java中輸入10000字符的字符串輸入

import java.io.*; 
class st 
{ 
    public static void main(String args[])throws IOException 
    { 
     String a; 
     BufferedReader g=new BufferedReader(new InputStreamReader(System.in)); 
     a=g.readLine(); 
    } 
} 
+1

你準備怎麼做? – arshajii

+3

你是什麼意思「它給NZEC錯誤」? –

+1

檢查這個問題http://stackoverflow.com/questions/5436207/runtime-error-nzec-in-simple-code – fujy

回答

0

只讀直到緩衝區已滿。

byte[] buffer = new byte[10000]; 
DataInputStream dis = new DataInputStream(System.in); 
dis.readFully(buffer); 
// Once you get here, the buffer is filled with the input of stdin. 
String str = new String(buffer); 
+0

你能否用一種簡單的方式解釋它....我需要它的字符串....並請告訴我一個代碼,它只是輸入並顯示一個大的字符串也將工作在ideone上...... – user2737624

+0

Ideone將工作,但您將不得不在網站上提供至少10000字節的輸入。我不知道是否允許添加如此大的輸入。 –

0

看看Runtime Error (NZEC) in simple code,以瞭解該錯誤消息的可能原因。

我建議你將readLine()包裝在try/catch塊中並打印錯誤消息/堆棧跟蹤。

+0

做了,但沒有用... – user2737624

+0

也許它來了,因爲這個輸入的限制不是10000個字符,而輸入是那麼大...... – user2737624

+0

什麼是引發的異常?還是沒有投擲失敗呢? – kmorris

1

BufferedReader使用足夠大的「用於大多數目的」的緩衝區。 10000個字符可能太大。由於您使用的是readLine,讀者正在掃描字符讀取,尋找行尾。在其內部緩衝區已滿並且仍未找到行尾時,它會引發異常。

你可以嘗試設置緩衝區的大小,當您創建的BufferedReader:

BufferedReader g=new BufferedReader(new InputStreamReader(System.in), 10002); 

或者你可以使用使用

BufferedReader.read(char[] cbuf, int off, int len) 

代替。這會給你一個char數組,你需要將它轉換回String。