我有以下测试数据:
public class InputTest {
@Before
public void setUp() throws Exception {
ByteArrayInputStream in = new ByteArrayInputStream("90 22 11 4 5\n".getBytes());
System.setIn(in);
}
,我需要从InputStream中读取每个数字作为整数。我创建了这个测试:
@Test
public void read() throws IOException {
int c;
while ((c = System.in.read()) != '\n') {
int i = readInt(c);
if (i != -1)
System.out.print(i);
}
}
private static int readInt(int c) {
int ret = 0;
if (c >= '0' && c <= '9') {
return ret * 10 + c - '0';
}
return -1;
}
我得到以下输出:90221145
-我将每个int打印到控制台。但是我需要像源字符串中一样的单独数字-90 22 11 4 5
我可以将其更改为:
@Test
public void read() throws IOException {
int c;
StringBuilder b = new StringBuilder();
while ((c = System.in.read()) != '\n') {
int i = readInt(c);
if (i != -1) {
b.append(i);
}else {
b.append(" ");
}
}
System.out.println(b.toString());
}
private static int readInt(int c) {
int ret = 0;
if (c >= '0' && c <= '9') {
return ret * 10 + c - '0';
}
return -1;
}
但是我不想在每个步骤上创建StringBuilder。我该怎么办?
P.S我了解BufferedReader's readLine()
方法和StringTokinizer
,但这不适合。我需要读取字节。我解决了存储这些数据的问题,只需要快速读取即可。
这是面试任务的一个例子,我需要阅读大量具有记忆约束的价值观。
答案 0 :(得分:-2)
在读取数据时将其写入System.out怎么样?
@Test
public void read() throws IOException {
int c;
StringBuilder b = new StringBuilder();
while ((c = System.in.read()) != '\n') {
int i = readInt(c);
if (i != -1) {
System.out.print(""+i);
}else {
System.out.print(" ");
}
}
System.out.print("\n"); // end of line
}