[英]Can I use the enter key as a delimiter when using Scanner to read user input, but not "\n"?
我正在尝试使用 Scanner 读取用户输入并使用“输入键”作为分隔符。 用户将复制和粘贴任何文本,例如一篇文章将有多个“\\n”字符。 问题是,在第一段中断之前,只能阅读任何文章的第一段。 我想阅读任何内容,直到用户按下“输入键”。 我希望有一种方法可以选择“输入键”,或者当我按下输入键时将扫描仪解释的值更改为唯一的值。
我不知道该尝试什么。 它必须是结束读取输入的输入键,而不是其他一些键,但我找不到任何方法来区分“输入键”和输入中的换行符。
这是我到目前为止:
public static String getInput()
{
Scanner reader = new Scanner(System.in);
reader.useDelimiter("\n");
String input = "";
boolean finished = false;
try {
input += reader.next();
}
catch (Exception e)
{
finished = true;
System.out.println(e);
}
return input;
}
不,这不是您可以使用Scanner
轻松完成的事情,甚至通常使用System.in
也无法做到。
System.in
仅在程序已通过您在 Java 程序周围使用的任何软件组装成字符流时才能看到程序的输入,以提供一个窗口,您可以在其中输入内容并打印到其中。 到那时,很可能按下 Enter 键已经表示为\\n
字符,与表示粘贴文本中换行符的\\n
相同。 这不受 Java 程序的控制——它受与之通信的终端/控制台软件的支配。
区分按键和粘贴文本的唯一可靠方法是明确使用窗口工具包,并让您的 Java 程序显示自己的窗口,该窗口直接与操作系统提供的键盘和剪贴板功能进行交互。
做得好是学习曲线上的一大步,如果您处于new Scanner(System.in)
是您处理输入的new Scanner(System.in)
方式的阶段,它可能对您所有人来说都更有效率所有这些都是为了将您的 UI 野心改变为更容易使用这些工具完成的事情。
给你,希望对你有帮助。
import java.util.*;
public class MyClass {
public static void main(String args[]) {
StringBuilder sb = new StringBuilder();
Scanner sc = new Scanner(System.in);
while(sc.hasNext()){
String line = sc.nextLine().trim();
if(!line.equalsIgnoreCase("end")){ //delimiter check
sb.append(line);
sb.append("\n");
}else
break;
}
System.out.println(sb.toString());
}
}
输入:
Hello World!
This is para1.
This is para2.
输出:
Hello World!
This is para1.
This is para2.
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.