Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/325.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java扫描器的基本查询_Java_Io_Java.util.scanner - Fatal编程技术网

Java扫描器的基本查询

Java扫描器的基本查询,java,io,java.util.scanner,Java,Io,Java.util.scanner,我试图让Java的扫描器一直接受输入,直到用户键入“end”的一些变体,如“end”、“end”、“end”等 然而,由于我对扫描器的经验有限,我想不出适用于“end”所有变体的代码。以下是我目前掌握的情况: private static Scanner userInput = new Scanner(System.in); String textBody = ""; while(!userInput.hasNext("end") && !userInput.hasNext("

我试图让Java的扫描器一直接受输入,直到用户键入“end”的一些变体,如“end”、“end”、“end”等

然而,由于我对扫描器的经验有限,我想不出适用于“end”所有变体的代码。以下是我目前掌握的情况:

private static Scanner userInput = new Scanner(System.in);
String textBody = "";

while(!userInput.hasNext("end") && !userInput.hasNext("END"))
{
textBody +=  userInput.nextLine() + "\n";
}

感谢您的帮助

使用
字符串将扫描器.nextLine
返回的字符串转换为小写。toLowerCase并将其与
“end”

进行比较,使用正则表达式尝试以下操作:

Scanner userInput = new Scanner(System.in);
Pattern end = Pattern.compile("end", Pattern.CASE_INSENSITIVE);
String textBody = "";

while(!userInput.hasNext(end)) {
    textBody +=  userInput.nextLine() + "\n";
}

如果您想在用户输入由“end”组成的行时终止循环(以大写字母表示,但在用户输入“end of the road”时不终止),请尝试以下操作:

private static Scanner userInput = new Scanner(System.in);
StringBuilder sb = new StringBuilder();

String line = userInput.nextLine();
while(!line.equalsIgnoreCase("end"))
{
    sb.append(line).append('\n');
    line = userInput.nextLine();
}

String textBody = sb.toString();

(您也可以将其作为
for
循环来编写。)

在toLowerCase为“end”之前,可能更合理的做法是逐行读取。无需使用
新字符串(“end”)
。只需将其与
“end”
进行比较。请注意,这仅在字符串“end”时有效是行中唯一的文本,前后都没有空格。@ÓscarLópez-好的观点。空格的问题(如果它是OP的问题)可以通过使用
!line.trim().equalsIgnoreCase(“end”)
来解决。