Проблемы с обработкой ввода в Java - PullRequest
0 голосов
/ 03 апреля 2009

Я пытаюсь прочитать ввод с терминала. Для этого я использую 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"));

}
}

То же самое все еще происходит. Должно быть, я неправильно понимаю Хеш-таблицы. Идеи, где дела идут плохо?

Ответы [ 3 ]

1 голос
/ 03 апреля 2009

Я только что заметил мою ошибку. Я должен использовать содержит ключ () вместо содержит () .

Я хотел бы поблагодарить всех за помощь.

В качестве бонуса я также узнал, что такое поле «значение». Ницца!

1 голос
/ 03 апреля 2009

Не беспокойтесь о поле значения - это просто говорит о том, что есть один массив символов, содержащий текст «get Hello», и оба args [0] и args [1] относятся к этому массив символов, но у них будут разные смещения и значения. args [0] будет иметь смещение 0 и счет 3; args [1] будет иметь смещение 4 и число 5.

Я понятия не имею, почему ваша хеш-карта не будет работать, хотя ... вы можете предоставить короткий, но полный пример программы?

0 голосов
/ 03 апреля 2009

Как сказал Джон, вы просто видите артефакт внутренней реализации String s в Java. Вы можете игнорировать поле value для ваших целей. Это не имеет ничего общего с тем, почему вещи не работают для вас. Вы должны показать нам часть кода, которая не работает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...