读入多行长度不等的数据串

要求:
程序首先输入一个整数N(N<100)表示后面数据行数。
接着读入N行数据。
每行数据长度不等,是用空格分开的若干个(不大于100个)正整数(不大于100000)

Scanner sc = new Scanner(System.in);
ArrayList<Integer> list = new ArrayList<Integer>();
int N = sc.nextInt();
sc.nextLine();//注意此行的作用
for (int i = 0; i < N; i++) {

    String line = sc.nextLine();
    String[] split = line.split(" ");
    for (int j = 0; j < split.length; j++) {
        list.add(Integer.parseInt(split[j]));
    }

 

这是因为在调用nextLine()函数前调用了Scanner的另一个函数nextInt()(或是nextDouble())。
出现这种情况的原因是两个函数的处理机制不同,nextInt()函数在缓冲区中遇到“空格”、“回车符”等空白字符时会将空白字符前的数据读取走,
但空白字符不会被处理掉,而nextLine()函数是在缓冲区中读取一行数据,这行数据以“回车符”为结束标志,
nextLine()会把包括回车符在内的数据提走。所以nextInt()后的nextLine()函数并非读取不到数据,
因为nextInt()将“回车符”留在了缓冲区,nextLine()读取时遇到的第一个字符便是“回车符”,所以直接结束了。

参考
1.https://blog.csdn.net/u014584274/article/details/75089058

 

posted @ 2022-01-13 19:42  jojo的奇妙编程  阅读(105)  评论(0)    收藏  举报