wangtingc
wangtingc
2017-08-26 03:34
采纳率: 16.7%
浏览 10.6k
已采纳

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条回答 默认 最新

  • Small_Mouse0
    鼠小 2017-08-26 14:55
    已采纳

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

     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);
        }
    

    图片说明

    点赞 评论
  • znCSDN
    zncsdn 2017-08-26 05:59

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

    点赞 评论
  • znCSDN
    zncsdn 2017-08-26 06:02

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

    点赞 评论

相关推荐