заменить значения в строке из Hashtable в Java - PullRequest
1 голос
/ 07 июня 2010

Моя строка выглядит так:

String values = "I am from UK, and you are from FR";

и моя хеш-таблица;

Hashtable countries = new Hashtable();
countries.put("United Kingdom", new String("UK"));
countries.put("France", new String("FR"));

Какой самый эффективный способ изменить значения в моей строке на значения из хеш-таблицы соответственно. Это всего лишь 2 значения, которые нужно изменить, но в моем случае у меня будет 100 +

Ответы [ 2 ]

5 голосов
/ 07 июня 2010

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

Map<String, String> countries = new HashMap<String, String>();
countries.put("United Kingdom", "UK");
countries.put("France", "FR");
for (Map.Entry<String, String> entry : countries.entrySet()) {
  values.replace(entry.getKey(), entry.getValue());
}

Пара заметок:

  1. Не используйте Hashtable. Вместо этого используйте Map (интерфейс) и HashMap (класс);

  2. Объявите вашу переменную, параметр и типы возврата, где это применимо, как интерфейсы, а не конкретные классы;

  3. Предполагая, что вы используете Java 5, используйте аргументы универсального типа для более удобочитаемого кода. В этом случае Map<String, String> и т.д .; и

  4. Не использовать new String("UK"). Там нет необходимости.

2 голосов
/ 07 июня 2010

Несколько мыслей. Прежде всего: зачем использовать hashtable? hashmap обычно быстрее, так как hashtable синхронизируется.

Тогда: почему бы не использовать дженерики?

HashMap<String, String>

гораздо выразительнее, чем просто HashMap

В-третьих: не используйте new String("UK"), "UK" подойдет, вы создаете одну и ту же строку дважды.

Но чтобы решить вашу проблему, вы, вероятно, захотите перевернуть карту:

Map<String,String> countries = new HashMap<String, String>();
countries.put("UK", "United Kingdom");
countries.put("FR", "France");

Теперь, если я вас правильно понимаю, вы хотите сделать что-то вроде этого:

String values = "I am from UK, and you are from FR";
for(Map.Entry<String, String> entry : countries.entrySet()){
    values = values.replace(entry.getKey(), entry.getValue());
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...