从Java中的Hashtable替换String中的值

时间:2010-06-07 08:06:49

标签: java hashtable

我的字符串看起来像;

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 个答案:

答案 0 :(得分:5)

我不确定你能做多少事情以一种值得的方式来优化它。实际上你可以为这样的自定义替换构建一个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")。没有必要。

答案 1 :(得分:2)

几点想法。首先:为什么要使用哈希表?哈希表通常更快,因为哈希表是同步的。

然后:为什么不使用泛型?

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