Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/391.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.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 - Fatal编程技术网

Java 使用扫描仪对象正确扫描空白输入

Java 使用扫描仪对象正确扫描空白输入,java,Java,我正在创建一个基本的吉他目录,我正在用扫描器进行测试,我试图扫描一个空白条目,当有空白条目时,它应该打印“ANY”,它会打印,我正在使用scan.useDelimiter(“\z”);现在,当我输入一个正确的条目,比如“fender”,它应该打印“fender”,但它只打印“ANY”,就好像输入不正确一样。。有人知道我能做些什么来解决这个问题吗?以下是sscce: import java.util.Scanner; public class SSCCE { public static

我正在创建一个基本的吉他目录,我正在用扫描器进行测试,我试图扫描一个空白条目,当有空白条目时,它应该打印“ANY”,它会打印,我正在使用scan.useDelimiter(“\z”);现在,当我输入一个正确的条目,比如“fender”,它应该打印“fender”,但它只打印“ANY”,就好像输入不正确一样。。有人知道我能做些什么来解决这个问题吗?以下是sscce:

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函数会起作用。干杯。