Java 如何读取多行输入
我试图像复制过去的输入一样读取多行输入,但我无法在循环停止读取时结束Java 如何读取多行输入,java,Java,我试图像复制过去的输入一样读取多行输入,但我无法在循环停止读取时结束。这是我的密码: import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); String input =null; while(sc.hasNext()) {
。这是我的密码:
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String input =null;
while(sc.hasNext()) {
input=sc.next();
}
String [] split = input.split(" ");
for(int i = 0;i<split.length;i++) {
for(int j = split[i].length()-1;j>=0;j--) {
System.out.print(split[i].charAt(j));
}
System.out.print(" ");
}
sc.close();
}
}
import java.util.Scanner;
公共班机{
公共静态void main(字符串[]args){
扫描仪sc=新的扫描仪(System.in);
字符串输入=null;
while(sc.hasNext()){
输入=sc.next();
}
String[]split=input.split(“”);
对于(int i=0;i=0;j--){
系统输出打印(拆分[i].charAt(j));
}
系统输出打印(“”);
}
sc.close();
}
}
使用缓冲区读取器类,这样您就可以同时获取多个输入
使用缓冲区读取器类,这样您就可以同时获取多个输入
因为您使用的是while
循环,只要指定的条件为真/满足,它就会通过代码块循环/执行
在这里,您正在检查退出循环的任何条件。此方法可能会在等待输入扫描时阻塞,并且扫描仪不会超过任何输入
我看到的另一个差距是,您一次又一次地将输入重新分配给input
var,而没有在接受下一行之前执行任何操作
您可以在此处更清楚地了解退出while循环:
因此,为了回答您的问题,您必须为while循环提供一些检查/退出条件,以便在循环中验证和退出。因为您使用的是while
循环,只要指定的条件为真/满足,它就会在代码块中循环/执行
在这里,您正在检查退出循环的任何条件。此方法可能会在等待输入扫描时阻塞,并且扫描仪不会超过任何输入
我看到的另一个差距是,您一次又一次地将输入重新分配给input
var,而没有在接受下一行之前执行任何操作
您可以在此处更清楚地了解退出while循环:
因此,为了回答您的问题,您必须为while循环提供一些检查/退出条件,以便在循环中验证和退出。方法将查看是否有内容可阅读。为此,它可能会阻塞并等待使用的InputStream
,如中所述:
public boolean hasNext()
如果此扫描仪的输入中有另一个令牌,则返回true在等待输入扫描时,此方法可能会阻塞。扫描仪不会超过任何输入
当InputStream
结束时,它将从hasNext()
调用返回并返回false
,因为没有要读取的令牌(并且数据/字节的源已关闭)。但是,由于您是通过系统从键盘读取的。
中没有“结束”输入,因为您仍然可以在应用程序中输入新文本,而while()
循环将读取这些文本
有几种解决方案:
根据启动java应用程序的方式,可以按CTRL-D显式关闭所谓的“STDIN”流,该流“附加”到键盘输入。这样,流系统.in
将结束,无法读取更多数据。这也由扫描器shasNext()
方法检测,该方法将在该点返回false
您可以调用java应用程序,通过文件或其他命令为“STDIN”流提供数据。例如:echo“data”| java Main
或java Main
(取决于您使用的终端/控制台)
在内容中添加结束标记并查找它。当您在数据中放置一个类似于“MY_text_END”
的文本并查找它时,您可以使用一个简单的equals()
检查while()
循环内部,当您看到标记“MY_text_END”
时停止读取
hasNext()
方法将查看是否有要读取的内容。为此,它可能会阻塞并等待使用的InputStream
,如中所述:
public boolean hasNext()
如果此扫描仪的输入中有另一个令牌,则返回true在等待输入扫描时,此方法可能会阻塞。扫描仪不会超过任何输入
当InputStream
结束时,它将从hasNext()
调用返回并返回false
,因为没有要读取的令牌(并且数据/字节的源已关闭)。但是,由于您是通过系统从键盘读取的。
中没有“结束”输入,因为您仍然可以在应用程序中输入新文本,而while()
循环将读取这些文本
有几种解决方案:
根据启动java应用程序的方式,可以按CTRL-D显式关闭所谓的“STDIN”流,该流“附加”到键盘输入。这样,流系统.in
将结束,无法读取更多数据。这也由扫描器shasNext()
方法检测,该方法将在该点返回false
您可以调用java应用程序,通过文件或其他命令为“STDIN”流提供数据。例如:echo“data”| java Main
或java Main
(取决于您使用的终端/控制台)
在内容中添加结束标记并查找它。当您在数据中放置一个类似于“MY_text_END”
的文本并查找它时,您可以使用一个简单的equals()
检查while()
循环内部,当您看到标记“MY_text_END”
时停止读取
首先谢谢你的帮助,我已经
Scanner sc = new Scanner(System.in);
String input = null;
while(sc.hasNext() && !(input = sc.next()).equals("exit")) {
System.out.println(input);
}
sc.close();