2014-01-28 55 views
0

我有一種將給定字符串映射到另一個字符串的方法,就像方法的輸入是「RS256」一樣,它將返回「SHA256WithRSA」等等。我的方法如下如何在java中替換/轉換/展開字符串

public String getAlgorithm(String alg) { 

    // The internal crypto provider uses different alg names 

     switch(alg) { 
      case "RSA256" : return "SHA256withRSA"; 
      case "SHA384" : return "SHA384withRSA"; 
      case "SHA512" : return "SHA512withRSA"; 
     } 
     throw new Exception("Not supported"); 

} 

給出是否有任何其他的方式來做到這一點(我不希望使用MAP)。我期待看看是否有任何設計模式或任何OOP概念來做到這一點。

+2

'我不希望使用MAP'。啊..我的眼睛..這裏有地圖嗎? –

+0

枚舉類型也可用於將'alg'映射到返回的字符串。 – Ivey

+0

你爲什麼不想使用Map? – Vaandu

回答

0

您可以使用if-else檢查alg等於您的條件和返回值類似於此。但目前的方式與此非常相似。

爲什麼不能使用Map?那是更好的方法。

Map<String,String> algoMap=new HashMap<>(String,String); 

現在你可以把algoMap.put("algoName","Value")

0

使用HashMap的

HashMap<String, String> newMap = new HashMap<String, String>(); 
newMap.put("RSA256", "SHA256withRSA"); 
newMap.put("SHA384", "SHA384withRSA"); 
newMap.put("SHA512", "SHA512withRSA"); 
String value = (String) newMap.get("RS256"); 
1

使用實景地圖,我的意思是java.util.Map這使鍵值對前。 Map<Key,Value>

Map<String,String> map= new HashMap<String,String>(); 
map.add("RSA256","SHA256withRSA"); 
map.add("SHA384","SHA384withRSA"); 
map.add("SHA512","SHA512withRSA"); 
... 

public String getAlgorithm(String alg) { 
    return map.get(alg); 
} 
+1

現在我可以在這裏看到一個地圖。 :) –

1

你實際上是在這裏編寫了一個Facade模式,我想你正在包裝某種類型的庫。 switch-case語句應該沒問題。 使用地圖會引入開銷,所以最好不要使用它。

0

您也可以使用枚舉類型,但無論哪種方式,您都必須使用不帶映射的switch語句。

enum Algorithm { 
    RSA256, 
    SHA384, 
    SHA512; 

    public String name(String pValue) throws Exception { 
     switch(this) { 
     case RSA256: 
     return "SHA256withRSA"; 
     case SHA384: 
     return "SHA384withRSA"; 
     case SHA512: 
     return "SHA512withRSA"; 
     default: 
     throw new Exception("Not supported"); 
    } 
} 

}