Java中输入的故障处理

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。这是我的密码

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()

我要感谢大家的帮助


作为奖励,我还了解了“值”字段是什么。很好

因为您的问题是在哈希表中放置和获取条目,所以请发布该代码。代码提供的相关性不清楚。