Я пытаюсь прочитать ввод с терминала. Для этого я использую 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(""));
Где-то еще в моем коде у меня есть HashTable
, где ключ и значения являются строками. Вот проблема:
Если я хочу получить значение из HashTable
, где ключ, который я использую для поиска в HashTable
, является одним из элементов args. Эти аргументы странные. Если пользователь вводит два аргумента (первый - это команда, а второй - это то, что пользователь хочет найти), я не могу найти совпадение.
Например, если HashTable содержит следующие значения:
[ {"Hello":"World"}, {"One":"1"}, {"Two":"2"} ]
и пользователь вводит:
get Hello
Мой код не возвращается "World"
.
Поэтому я использовал отладчик (используя Eclipse), чтобы посмотреть, что внутри args
. Я обнаружил, что args[1]
содержит "Hello"
, но внутри args[1]
есть поле с именем value
, которое имеет значение ['g','e','t',' ','H','e','l','l','o']
.
То же самое относится и к args[0]
. Он содержит "get"
, но поле value
содержит ['g','e','t',' ','H','e','l','l','o']
!
Какого черта !!!
Однако, если я проверю свой HashTable
, где бы ни находился ключ "Hello"
, значение = ['H','e','l','l','o']
.
Есть идеи?
Большое спасибо.
EDIT:
Вот пример кода. То же самое все еще происходит.
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"));
}
}
То же самое все еще происходит. Должно быть, я неправильно понимаю Хеш-таблицы. Идеи, где дела идут плохо?