В BufferedReader
вместо String readLine()
используйте int read(char[] cbuf, int off, int len)
;затем вы можете использовать boolean ready()
, чтобы увидеть, все ли у вас получилось, и конвертировать в строку, используя конструктор String(byte[] bytes, int offset, int length)
.
Если вам не нужны пробелы и вы просто хотите получить максимумколичество символов в строке, то предложение, предложенное Стивеном, действительно простое:
import java.io.BufferedReader;
import java.io.IOException;
public class BoundedReader extends BufferedReader {
private final int bufferSize;
private char buffer[];
BoundedReader(final BufferedReader in, final int bufferSize) {
super(in);
this.bufferSize = bufferSize;
this.buffer = new char[bufferSize];
}
@Override
public String readLine() throws IOException {
int no;
/* read up to bufferSize */
if((no = this.read(buffer, 0, bufferSize)) == -1) return null;
String input = new String(buffer, 0, no).trim();
/* skip the rest */
while(no >= bufferSize && ready()) {
if((no = read(buffer, 0, bufferSize)) == -1) break;
}
return input;
}
}
Редактировать: это предназначено для чтения строк из пользовательского терминала.Он блокируется до следующей строки и возвращает bufferSize
-ограниченный String
;любой дальнейший ввод в строке отбрасывается.