Java 使用扫描仪对象正确扫描空白输入
我正在创建一个基本的吉他目录,我正在用扫描器进行测试,我试图扫描一个空白条目,当有空白条目时,它应该打印“ANY”,它会打印,我正在使用scan.useDelimiter(“\z”);现在,当我输入一个正确的条目,比如“fender”,它应该打印“fender”,但它只打印“ANY”,就好像输入不正确一样。。有人知道我能做些什么来解决这个问题吗?以下是sscce:Java 使用扫描仪对象正确扫描空白输入,java,Java,我正在创建一个基本的吉他目录,我正在用扫描器进行测试,我试图扫描一个空白条目,当有空白条目时,它应该打印“ANY”,它会打印,我正在使用scan.useDelimiter(“\z”);现在,当我输入一个正确的条目,比如“fender”,它应该打印“fender”,但它只打印“ANY”,就好像输入不正确一样。。有人知道我能做些什么来解决这个问题吗?以下是sscce: import java.util.Scanner; public class SSCCE { public static
import java.util.Scanner;
public class SSCCE {
public static void main(String[] args)
{
System.out.println("Enter a builder name: ");
Scanner scan = new Scanner(System.in);
scan.useDelimiter("\\z"); // count a blank entry (end of input)
String entry_1 = scan.next();
if (entry_1.equalsIgnoreCase("FENDER")
|| entry_1.equalsIgnoreCase("MARTIN")
|| entry_1.equalsIgnoreCase("GIBSON")
|| entry_1.equalsIgnoreCase("COLLINGS")
|| entry_1.equalsIgnoreCase("OLSON")
|| entry_1.equalsIgnoreCase("RYAN")
|| entry_1.equalsIgnoreCase("PRS"))
{
entry_1 = entry_1.toUpperCase();
System.out.println(entry_1);
}
else
{
entry_1 = "ANY";
System.out.println(entry_1);
}
}
}
您可以尝试打印扫描的值,以查看它为什么不进入if语句
import java.util.Scanner;
public class SSCCE {
public static void main(String[] args)
{
System.out.println("Enter a builder name: ");
Scanner scan = new Scanner(System.in);
scan.useDelimiter("\\z"); // count a blank entry (end of input)
String entry_1 = scan.next();
System.out.println("Input = [" + entry_1 + "]");
// rest of the code...
}
默认情况下,扫描程序从返回的标记中删除分隔符。当分隔符是换行符(默认值)时,当您执行fender时,条目_1被指定为“fender”。更改分隔符后,由enter引起的换行符将不再被删除,因此在entry_1中会出现“fender\n”,从而导致if条件失败
要修复此问题,只需执行String entry_1=scan.next().trim();相反,它会删除尾部的换行符。我认为这是由于您使用了
\\z
。请看这个,了解更详细的故事。为了解决您的问题,只需将其更改为\\Z
即可。以下代码适用于我:
public static final Set<String> names = Sets.newHashSet("martin", "gibson", ...);
public static void main(String[] args) {
System.out.println("Enter a builder name: ");
Scanner scan = new Scanner(System.in);
scan.useDelimiter("\\Z"); // count a blank entry (end of input)
String entry = scan.next();
entry = "any" if (!names.contains(entry.toLowerCase());
System.out.println(entry.toUpperCase());
}
publicstaticfinalsetnames=Sets.newHashSet(“martin”、“gibson”和…);
公共静态void main(字符串[]args){
System.out.println(“输入生成器名称:”);
扫描仪扫描=新扫描仪(System.in);
scan.useDelimiter(“\\Z”);//计算一个空白条目(输入结束)
String entry=scan.next();
entry=“any”如果(!names.contains(entry.toLowerCase());
System.out.println(entry.toUpperCase());
}
注意:我假设您一次扫描一个名称。如果不是,则使用换行符。如果您执行此建议,我猜您会发现由于使用了\z分隔符,它扫描的内容比您希望的要多。您可能只希望扫描一行,而不是整个系统。在流中。我认为他一次只扫描一个名称。如果不是,那么你的观点是绝对正确的。啊,我知道会有一个解决办法,谢谢。我知道我输入的任何内容都会附加一个新行,我尝试了很多事情,比如if(entry_1.equalsIgnoreCase(“FENDER”+“\r\n”),但没有起作用,但是trim函数会起作用。干杯。