2013-09-01 119 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。