Java 用大括号包装字符串的扫描仪
我有一个方法,它处理一行,将第一个单词分成一个名为cmd的字符串,其余的单词分成一个字符串向量作为参数,然后将它们发送给一个函数来处理命令。出于某种原因,这些参数被包装在方括号中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
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就会很明显。