java中用Scanner获取多行字符串,不知道行数,怎么结束输入,回车没反应

public static void main(String[] args){
Scanner sc=new Scanner(System.in);

    List<List<Integer>> list=new ArrayList<List<Integer>>();
    List<Integer> list1=new ArrayList<Integer>();
    while(sc.hasNextLine()) {
        String s=sc.nextLine().trim();
        String[] str=s.split(",");
        for(int i=0;i<str.length;i++) {
            list1.add(Integer.parseInt(str[i]));
        }
        list.add(list1);
    }
    System.out.println(count(list));

}
输入:
1,2,1,2
1,3,2
2,1,3
4,1,1
想在这里结束输入,回车,想让它运行下面的输出代码,不会运行,没法结束输入,因为不知道字符串行数,这里怎么结束输入啊,各位大神,帮帮忙

3个回答

给你改好了,,,输入完之后,多敲一个回车即可,,,亲测,,有问题还可以追问,给个采纳呗,,

 public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        List<List<Integer>> list = new ArrayList<List<Integer>>();
        List<Integer> list1 = new ArrayList<Integer>();
        String s = null;
        while (!(s = sc.nextLine()).equals("")) {
            String[] str = s.split(",");
            for (int i = 0; i < str.length; i++) {
                list1.add(Integer.parseInt(str[i]));
            }
            list.add(list1);
        }
        System.out.println(list);
    }

图片说明

wangtingc
wangtingc 回复小鼠标丶: 谢谢你,就是之前在机考的时候碰到过,这个我好像也遇到过
大约 3 年之前 回复
Small_Mouse0
鼠小 回复wangtingc: 我没记错的话,,牛课网上有道例题(这是机考,自动输入),,就给的是这个“sc.hasNextLine()”作为结束判断,,,我上次也遇到同样问题,自己测试用“sc.hasNextLine()”测试不了,,然而放进去运行就是可以的,,这个可能跟输入方式有关吧,机考的时候又结束标识可能,,,,你可以平时测用,"!(s = sc.nextLine()).equals("")",,之后改成“sc.hasNextLine()”,是可以的,,你可以试试(牛客网上有这种)
大约 3 年之前 回复
wangtingc
wangtingc 谢谢你,我知道你说的这个,因为这个是机考的时候,我需要读取多行字符串,而程序的输入是系统自己自动输入,我无法手动多添加一个空格或任何一个我定义的结束符。现在想想,对于之前说的用ctrl+z我也是没有办法自己输入的,也就是说我只能写好程序,直接运行,系统会自动输入指定样式数据,所以我得知道我该怎么接收这种格式的输入,怎么结束输入。这个问题,怎么解决啊?
大约 3 年之前 回复

根据输入来源的不同 ,Scanner 的hasNextLine方法会产生不同效果,若Scanner的输入来源来自文件你这样写是没有任何问题的,
但是你的输入来自控制台(System.in) 这时当程序执行到sc.hasNextLine()方法时发现是空白(因为你什么都还没有输入),这时hasNextLine方法
就会阻塞线程直到你在键盘上输入后才会继续执行,但问题是一旦输入任何字符后程序就会认为你已经输入了,既然有了输入那么hasNextLine
方法必然会返回true,你这个循环就成了死循环了,所有永远也跳不出来!那么如何让程序认为你是要结束输入,而不是把你的任何输入当作正常的
输入来对待呢,答案是 ctrl+z !输入ctrl+z 后就可以表达出你是要结束输入!这个就是一个结束的标志 相当于EOF

wangtingc
wangtingc 试了一下,在调试模型下,我的还是不行。输入一个指定字符这种方法,可以。但是我这个是在机考上面的,我不能输入ctrl+z,而且我不能用指定字符结束输入,必须按照系统的输入格式,系统会自动输入指定格式的输入,这种情况下,有解决的办法吗?谢谢
大约 3 年之前 回复
znCSDN
zncsdn 回复wangtingc: 我是在调试模式下使用的ctrl+z 可以,运行模式下就不行了,你就定义一个输入特定的字符就跳出循环就可以了
大约 3 年之前 回复
znCSDN
zncsdn 回复wangtingc: 就是在你要结束输入的时候就ctrl+z啊,我的eclipse都是可以的呢
大约 3 年之前 回复
wangtingc
wangtingc @znCSDN
大约 3 年之前 回复
wangtingc
wangtingc ctrl+z之后,回车,还是没有运行出结果,还是有光标在下一行,等待我输入下一行的感觉
大约 3 年之前 回复
wangtingc
wangtingc 回答的好有条理,首先谢谢你,因为这个是机试的时候要写的代码,输入有规定,我也不能自己定义结束符,所以尝试了下你说的用ctrl+z,可是为什么没反应,难道是我使用的方法错了?我是直接在eclipse运行时,输入的时候,输入完最后一行直接ctrl+z,是这样吗?
大约 3 年之前 回复

还有一种方法就是你自已定义一个结束输入的字符,在while 循环体中中判断Scanner .nextLine() 若为你定义的结束标记就 break!

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问
相关内容推荐