Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/364.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_Java.util.scanner - Fatal编程技术网

Java 用大括号包装字符串的扫描仪

Java 用大括号包装字符串的扫描仪,java,java.util.scanner,Java,Java.util.scanner,我有一个方法,它处理一行,将第一个单词分成一个名为cmd的字符串,其余的单词分成一个字符串向量作为参数,然后将它们发送给一个函数来处理命令。出于某种原因,这些参数被包装在方括号中 static private boolean processLine(String line) { if (debug) System.out.println("DEBUG: processLine \"" + line + "\""); line = new

我有一个方法,它处理一行,将第一个单词分成一个名为cmd的字符串,其余的单词分成一个字符串向量作为参数,然后将它们发送给一个函数来处理命令。出于某种原因,这些参数被包装在方括号中

static private boolean processLine(String line) {
            if (debug) System.out.println("DEBUG: processLine \"" + line + "\"");    

            line = new String(line.trim());
            String cmd = new String();
            Vector<String> params = new Vector<String>(3);
            boolean hasparam = false;
            Scanner s = new Scanner(line).useDelimiter(" ");
            int x = 0;
            while (s.hasNext()) {
                    if (x == 0) { cmd = s.next(); }
                    else if (x >= 1) {
                            params.add(s.next());
                            hasparam = true;
                    }
                    x++;
            }

            // Next we process the command.
            processCmd(cmd, params);

            return exit;
    }

static private void processCmd(String cmd, Vector<String> params) {
            boolean invalid = false;

            if (debug) {
                    System.out.print("DEBUG: processCmd " + cmd);
                    if (params.size() == 0) System.out.println();
                    else for (String param : params) 
                           System.out.println(" " + params);
            }
我不确定我为什么会有这种行为,我希望得到一个解释以及解决方案

出于某种原因,这些参数被包装在方括号中

static private boolean processLine(String line) {
            if (debug) System.out.println("DEBUG: processLine \"" + line + "\"");    

            line = new String(line.trim());
            String cmd = new String();
            Vector<String> params = new Vector<String>(3);
            boolean hasparam = false;
            Scanner s = new Scanner(line).useDelimiter(" ");
            int x = 0;
            while (s.hasNext()) {
                    if (x == 0) { cmd = s.next(); }
                    else if (x >= 1) {
                            params.add(s.next());
                            hasparam = true;
                    }
                    x++;
            }

            // Next we process the command.
            processCmd(cmd, params);

            return exit;
    }

static private void processCmd(String cmd, Vector<String> params) {
            boolean invalid = false;

            if (debug) {
                    System.out.print("DEBUG: processCmd " + cmd);
                    if (params.size() == 0) System.out.println();
                    else for (String param : params) 
                           System.out.println(" " + params);
            }
这是因为您正在打印
向量
本身,而不是
向量
的元素。所以
toString()
向量的
method
在下面的行中调用:

System.out.println(" " + params);
将此行更改为:

System.out.println(" " + param);
出于某种原因,这些参数被包装在方括号中

static private boolean processLine(String line) {
            if (debug) System.out.println("DEBUG: processLine \"" + line + "\"");    

            line = new String(line.trim());
            String cmd = new String();
            Vector<String> params = new Vector<String>(3);
            boolean hasparam = false;
            Scanner s = new Scanner(line).useDelimiter(" ");
            int x = 0;
            while (s.hasNext()) {
                    if (x == 0) { cmd = s.next(); }
                    else if (x >= 1) {
                            params.add(s.next());
                            hasparam = true;
                    }
                    x++;
            }

            // Next we process the command.
            processCmd(cmd, params);

            return exit;
    }

static private void processCmd(String cmd, Vector<String> params) {
            boolean invalid = false;

            if (debug) {
                    System.out.print("DEBUG: processCmd " + cmd);
                    if (params.size() == 0) System.out.println();
                    else for (String param : params) 
                           System.out.println(" " + params);
            }
这是因为您正在打印
向量
本身,而不是
向量
的元素。所以
toString()
向量的
method
在下面的行中调用:

System.out.println(" " + params);
将此行更改为:

System.out.println(" " + param);

的确如果有多个参数,错误就会很明显:
>addhosting1
将产生
DEBUG:processCmd add[hosting,1][hosting,1]
@MichaelMyers:No,在这种情况下,
params
只有一个元素,而该元素是
hosting
。谢谢。我们可能会错过的小事情。我很高兴能得到你的帮助……如果它解决了你的问题,你可以接受答案。@VishalK:对;这就是为什么OP认为他的代码与
[]
无关。如果有多个参数,那么这个错误是显而易见的。如果有多个参数,错误就会很明显:
>addhosting1
将产生
DEBUG:processCmd add[hosting,1][hosting,1]
@MichaelMyers:No,在这种情况下,
params
只有一个元素,而该元素是
hosting
。谢谢。我们可能会错过的小事情。我很高兴能得到你的帮助……如果它解决了你的问题,你可以接受答案。@VishalK:对;这就是为什么OP认为他的代码与
[]
无关。如果有多个参数,那么bug就会很明显。