Java中输入的故障处理
我正在尝试从终端读取输入。为此,我使用了一个BufferedReader。这是我的密码Java中输入的故障处理,java,string,input,Java,String,Input,我正在尝试从终端读取输入。为此,我使用了一个BufferedReader。这是我的密码 BufferedReader reader = new BufferedReader(new InputStreamReader(System.in)); String[] args; do { System.out.println(stateManager.currentState().toString()); System.out.print("> "); args = re
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
String[] args;
do {
System.out.println(stateManager.currentState().toString());
System.out.print("> ");
args = reader.readLine().split(" ");
// user inputs "Hello World"
} while (args[0].equals(""));
在代码的其他地方,我有一个哈希表
,其中键和值都是字符串。问题是:
如果我想从哈希表
中获取一个值,我在哈希表
中查找的键是args元素之一。这些arg很奇怪。如果用户输入两个参数(第一个是命令,第二个是用户要查找的参数),我找不到匹配项
例如,如果哈希表包含以下值:
[ {"Hello":"World"}, {"One":"1"}, {"Two":"2"} ]
用户输入:
get Hello
我的代码不会返回“世界”
因此,我使用调试器(使用Eclipse)查看args
的内部内容。我发现args[1]
包含“Hello”
,但在args[1]
中有一个名为value
的字段,它的值为['g'、'e'、't'、''、'H'、'e'、'l'、'o']
args[0]
也是如此。它包含“get”
,但是值字段包含['g'、'e'、't'、''、'H'、'e'、'l'、'l'、'o']
见鬼
但是,如果我检查我的哈希表
,只要键是“Hello”
,值=['H'、'e'、'l'、'l'、'o']
有什么想法吗
多谢各位
编辑:
下面是代码示例。同样的情况仍在发生
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Hashtable;
public class InputTest
{
public static void main(String[] args)
{
BufferedReader reader = new BufferedReader(new InputStreamReader( System.in));
Hashtable<String, String> EngToSpa = new Hashtable<String, String>();
// Adding some elements to the Eng-Spa dictionary
EngToSpa.put("Hello", "Hola");
EngToSpa.put("Science", "Ciencia");
EngToSpa.put("Red", "Rojo");
// Reads input. We are interested in everything after the first argument
do
{
System.out.print("> ");
try
{
args = reader.readLine().trim().split("\\s");
} catch (IOException e)
{
e.printStackTrace();
}
} while (args[0].equals("") || args.length < 2);
// ^ We don't want empty input or less than 2 args.
// Lets go get something in the dictionary
System.out.println("Testing arguments");
if (!EngToSpa.contains(args[1]))
System.out.println("Word not found!");
else
System.out.println(EngToSpa.get(args[1]));
// Now we are testing the word "Hello" directly
System.out.println("Testing 'Hello'");
if (!EngToSpa.contains("Hello"))
System.out.println("Word not found!");
else
System.out.println(EngToSpa.get("Hello"));
}
}
导入java.io.BufferedReader;
导入java.io.IOException;
导入java.io.InputStreamReader;
导入java.util.Hashtable;
公共类输入测试
{
公共静态void main(字符串[]args)
{
BufferedReader reader=新的BufferedReader(新的InputStreamReader(System.in));
Hashtable EngToSpa=新的Hashtable();
//向Eng Spa字典添加一些元素
“你好”,“你好”;
EngToSpa.put(“科学”、“科学”);
EngToSpa.put(“红色”、“Rojo”);
//读取输入。我们对第一个参数之后的所有内容都感兴趣
做
{
系统输出打印(“>”);
尝试
{
args=reader.readLine().trim().split(\\s);
}捕获(IOE异常)
{
e、 printStackTrace();
}
}而(args[0]。等于(“”| | args.length<2);
//^我们不需要空输入或少于2个参数。
//我们去查字典吧
System.out.println(“测试参数”);
如果(!EngToSpa.contains(args[1]))
System.out.println(“找不到单词!”);
其他的
System.out.println(EngToSpa.get(args[1]);
//现在我们直接测试单词“Hello”
System.out.println(“测试‘Hello’”);
如果(!EngToSpa.contains(“Hello”))
System.out.println(“找不到单词!”);
其他的
System.out.println(EngToSpa.get(“Hello”);
}
}
同样的情况仍在发生。我一定是误会了哈希表。想知道哪里出了问题吗?不用担心值字段-这只是说有一个包含“get Hello”文本的字符数组,args[0]和args[1]都引用该字符数组,但它们的偏移量和计数不同。args[0]的偏移量为0,计数为3;args[1]的偏移量为4,计数为5
我不知道为什么你的哈希映射不起作用。。。您能提供一个简短但完整的示例程序吗?正如Jon所说,您看到的只是Java中String
s内部实现的一个工件。出于您的目的,您可以忽略值
字段。这与为什么事情不适合你无关。您需要向我们显示代码中不起作用的部分。我刚刚注意到我的错误。我必须使用containsKey()而不是contains()
我要感谢大家的帮助
作为奖励,我还了解了“值”字段是什么。很好 因为您的问题是在哈希表中放置和获取条目,所以请发布该代码。代码提供的相关性不清楚。