如何使用更干净/更好的代码改进(字符串)Switch语句?

时间:2014-03-15 10:32:35

标签: java switch-statement

我绝不是一名专业的Java开发人员,我为解决各种问题/改进现有解决方案而编写代码,主要是为了我自己。我是自学成才,所以我可能缺乏一些基本的Java /编程技能。

我想知道是否有更好的方法来改进以下代码段。

我正在解析一个网站,需要将传入的数据转换为本地化语言。为此,我使用一个简单的开关/案例场景来解析String。

用其他东西可以改善吗? Map / HashMap

实施例代码:

String mCity = "Soelden";
switch (mCity) {
  case "Crans Montana"  : mCity = "Crans-Montana";  break;
  case "Soelden"        : mCity = "Sölden";         break;
  case "Val d Isere"    : mCity = "Val d'Isere";    break;
  case "St. Moritz"     : mCity = "Sankt Moritz";   break;
}

3 个答案:

答案 0 :(得分:3)

这是一个例子:

import java.util.HashMap;
import java.util.Map;

public final class Translator {

    private Map<String, String> translation;

    public Translator() {
        translation = new HashMap<>();
        translation.put("Crans Montana", "Crans-Montana");
        translation.put("Soelden", "Sölden");
        translation.put("Val d Isere", "Val d'Isere");
        translation.put("St. Moritz", "Sankt Moritz");
    }

    public String translate(String input) {
        String result = this.translation.get(input);
        return (result != null) ? result : "";
    }

    public static void main(String[] args) {
        Translator t = new Translator();

        System.out.println(t.translate("Soelden")); // prints Sölden
    }
}

答案 1 :(得分:2)

Map<String, String> cities = new HashMap<>();
cities.put("Crans Montana", "Crans-Montana");
cities.put("Soelden", "Sölden");
// more cities.put(...)

String mCity = "Soelden";
String mCityLocalized = cities.get(mCity); // will be "Sölden"

如果要翻译到不同的城市,可以使用嵌套结构。

答案 2 :(得分:2)

我的版本:

import java.util.HashMap;
import java.util.Map;

public class MExample {

    private static Map<String,String>  map = new HashMap<String, String>();

    static {
        map.put("Crans Montana", "Crans-Montana");
        map.put("Soelden", "Sölden");
        map.put("Val d Isere", "Val d'Isere");
        map.put("St. Moritz", "Sankt Moritz");
    }


    public static String normalize(String s){
        String result = map.get(s);
        return (result != null) ? result : s;
    }

 //in-place test
    public static void main(String[] args) {
        System.out.println("v1 = " + normalize("St. Moritz")); 
        System.out.println("v2 = " + normalize("12"));
    }
}