Java:在不知道输入行数的情况下读取输入

标签 java input java.util.scanner

这可能是非常非常基本的,也可能是我完全缺少的东西。我已经开始在在线 channel 上做一些有竞争力的节目。我必须读取逗号分隔的字符串并对其进行一些操作,但问题是我不知道输入的行数。下面是输入示例

输入 1

John,Jacob
Lesley,Lewis
Remo,Tina
Brute,Force

输入 2

Hello,World
Java,Coder
........
........
//more input lines
Alex,Raley
Michael,Ryan

我正在尝试读取输入并在遇到行尾时中断但没有运气。这是我一直在尝试的

//1st method
Scanner in = new Scanner(System.in);

do{
    String relation = in.nextLine();
    //do some manipulation
    System.out.println(relation);

}while(in.nextLine().equals(""));   //reads only first line and breaks

//2nd method
Scanner in = new Scanner(System.in);
while(in.hasNext()){
    String relation = in.next();
    System.out.println(relation);
    if(relation.equals("")){
        break;
    }
}

//3rd method
Scanner in = new Scanner(System.in);
while(true){   //infinite loop
    String relation = in.nextLine();
    System.out.println(relation);
    if(relation.equals("")){
        break;
    }
}

有人可以帮忙吗

PS:请不要评判。尽管我知道如何在 Java 中获取用户输入以及 next() 和 nextLine() 之间的区别,但我是竞争性编程的新手。

最佳答案

我不会写为什么你不应该使用 Scanner .有很多文章为什么你不应该使用 Scanner在竞争性编程中。而是使用 BufferedReader .

在竞争性编程中,他们将输入从文件重定向到您的代码。

它的工作原理类似于 ./a.out > output.txt < input.txt例如。

如此读取直到在while循环中检测到null。

public static void main(String args[] ) throws Exception {

        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

        String s;
        while((s = br.readLine()) != null)
        {
            //System.out.println(s);
        }
    }

通过键盘进行测试,模拟 null从你的键盘:

Ctrl+D。它会突破while循环以上。

关于Java:在不知道输入行数的情况下读取输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46434391/

相关文章:

java - 我如何使用 spring Autowiring 使用内存中的 derby 数据库来使用一堆 DAO?

java - 给定代码的时间复杂度。

java.lang.UnsatisfiedLinkError 即使库和类有方法

java - 通过 Java 或 Shell 脚本在 Linux 上以编程方式启动 VPN 连接

html - 问题系统的 CSS 输入字段和按钮位置

html - IOS 设备出现 HTML 表单输入问题(类型 = 文本)

Java:用户输入 - 扫描仪 - 第二次输入后程序挂起

java:扫描仪在使用useDelimiter时要求额外的值

css - 使输入字段的宽度相对于其内容

java - 将文件中的整数添加到数组