立即从命令行读取多行输入

时间:2015-08-23 18:36:55

标签: java input

我需要一个简单的类来一次读取多行输入。 例如,从缓冲区一次读取这两行:

  

b8 b7

     

g8 g2

此代码仅输入缓冲区中的第一行,而没有第一个字符......

int avail = System.in.read();
byte[] buf = new byte[avail];
System.in.read(buf);
String s = new String(buf);
String[] lines = s.split("\n");

//System.out.println(lines);

for(int i=0; i<lines.length; i++) {
    System.out.println(lines[i]);
}

1 个答案:

答案 0 :(得分:1)

没有第一个字符,因为第一个字符在第一个avail调用后保存在read()中。然后,您将创建一个缓冲区,其大小为第一个字符的ASCII值(不是您想要的缓冲区大小)。

更好的方法是逐行读取输入行BufferedReader,如下所示:

public class Main {
    public static void main(String[] args) throws Exception {
        try (BufferedReader input = new BufferedReader(new InputStreamReader(System.in))) {
            StringBuilder sb = new StringBuilder();
            String line;
            while ((line = input.readLine()) != null) {
                if ("".equals(line)) break;
                sb.append(line).append('\n');
            }
            System.out.println(Arrays.toString(sb.toString().split("\n")));
        }
    }
}