这可能是非常基本的,或者可能是我完全缺失的东西。我已经开始在线渠道进行一些有竞争力的编程。我必须读取逗号分隔的字符串并对其进行一些操作,但问题是我不知道输入行的数量。以下是输入示例
输入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()之间的区别。答案 0 :(得分:2)
应该相当容易。试试
while(in.hasNextLine()){
String relation = in.nextLine();
if("exit".equalsIgnoreCase(relation))break;
//do some manipulation
System.out.println(relation);
}
方法Scanner#hasNextLine
只是检查输入中是否有下一行,但是没有真正推进扫描程序。另一方面,Scanner#nextLine
读取输入并推进扫描仪。
更新您可能希望放置一些条件退出循环。例如。上面的片段在遇到字符串“exit”后停止读取更多输入。
答案 1 :(得分:2)
我不会写为什么你不应该使用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
循环。
答案 2 :(得分:0)
除了上述两种方法外,我还有另一种解决此问题的方法。看看下面的代码,你可以抓住NoSuchElementException
来解决这个问题。
import java.util.*;
public class Program
{
public static void main(String[] args)
{
Scanner sc = new Scanner(System.in);
try
{
while(true)
String a=sc.next();
System.out.print(a);
}
catch(NoSuchElementException k)
{
}
}
}
答案 3 :(得分:0)
你所有的方法都可以改进。
但是让我们考虑一下 while 循环的第二种方法。
Scanner in = new Scanner(System.in);
String s;
while(in.hasNext()){
s=in.nextLine();
System.out.println(s);
}
同样,您可以更改每个代码。
您也可以使用 BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
来缓冲您的输入,然后检查 in.readLine()) != null