2013-08-20 96 views
3

所以我有這4個變量如何檢查是否變量名中包含的字符串,然後輸出字符串變量內容

private final String PROG_DEPT = "PROGRAMMING/ENGINEERING"; 
private final String DES_DEPT = "DESIGN/WRITING"; 
private final String ART_DEPT = "VISUAL ARTS"; 
private final String SOUND_DEPT = "AUDIO"; 

我希望能夠做的就是得到一個字符串,並將其與變量和然後輸出變量包含的內容,如果它等於它。

例如,如果我的字符串等於「ART_DEPT」,那麼它檢查是否有一個變量,名爲ART_DEPT然後輸出「視覺藝術」

我想將它放在一個二維字符串數組或列表,但我我真的不知道如何去做我想做的事

回答

8

你正在尋找的數據類型是Map<String, String>

Map<String, String> departmentNames = new HashMap<String, String>(); 
departmentNames.put("PROG_DEPT", "PROGRAMMING/ENGINEERING"); 
departmentNames.put("DES_DEPT", "DESIGN/WRITING"); 
//...etc... 

//... 

String dept = "PROG_DEPT"; 
String deptName = departmentNames.get(dept); 
System.out.println(deptName); //outputs "PROGRAMMING/ENGINEERING" 

A Map將唯一鍵值綁定到值。在這種情況下,它們的類型都是String。您使用put(key, value)添加綁定,並使用get(key)獲取密鑰的綁定。

+0

將這個得到的串的第二部分? – Exikle

+0

@Exikle:如果用「第二部分」表示上面常量中的值,那麼是的。 –

3

你需要使用的是一個地圖。

private final Map<String,String> myMap= new HashMap<String,String>() ; 
{ 
    myMap.put("PROG_DEPT","PROGRAMMING/ENGINEERING"); 
    myMap.put("DES_DEPT","DESIGN/WRITING"); 
    myMap.put("ART_DEPT","VISUAL ARTS"); 
    myMap.put("SOUND_DEPT","AUDIO"); 
} 

然後在下面的方式來使用它:

String input= "ART_DEPT" ; 
System.out.println(myMap.get(input)); 
4

你可能想使用的Map某種如HashMap<String,String>。我建議您閱讀Map界面和HashMap類的Javadocs。

1

聽起來像你正在尋找反射(或者如果你想使用不同的數據類型,而不是在類中查找變量,然後Map<String, String>)。看起來像Map方法已經被很好地覆蓋了,所以只是因爲這對我很有趣,這裏是反射方法(不是說這不是解決這個問題的最好方法,但是因爲你要求檢查一個變量是否存在,它的值)

import java.lang.reflect.Field; 

public class SOQuestion { 
    private final String PROG_DEPT = "PROGRAMMING/ENGINEERING"; 
    private final String DES_DEPT = "DESIGN/WRITING"; 
    private final String ART_DEPT = "VISUAL ARTS"; 
    private final String SOUND_DEPT = "AUDIO"; 

    public static void main(String ... args) throws IllegalArgumentException, IllegalAccessException, InstantiationException { 
    System.out.println(reflectValue("ART_DEPT", SOQuestion.class)); 
    System.out.println(reflectValue("COMP_DEPT", SOQuestion.class)); 
    } 

    public static String reflectValue(String varible, Class thing) throws IllegalArgumentException, IllegalAccessException, InstantiationException { 
    Field[] fs = thing.getDeclaredFields(); 
    for(int i = 0; i < fs.length; i++) { 
     if(fs[i].getName().equals(varible)) { 
     fs[i].setAccessible(true); 
     return (String) fs[i].get(thing.newInstance()); 
     } 
    } 
    return null; 
    } 
} 

打印"ATR_DEPT"將打印VISUAL ARTS第一請求和第二請求不存在的"COMP_DEPT"將返回null;

5

我會去與一個枚舉:

package com.stackoverflow.so18327373; 

public class App { 
    public static void main(final String[] args) { 
     final String in = "DES_DEPT"; 
     try { 
      final Departement departement = Departement.valueOf(in); 
      System.out.println(departement.getLabel()); 
     } catch (final IllegalArgumentException ex) { 
      // in was not a known departement 
      System.err.println("Bad value: " + in); 
     } 
    } 

    public static enum Departement { 
     PROG_DEPT("PROGRAMMING/ENGINEERING"), 
     DES_DEPT("DESIGN/WRITING"), 
     ART_DEPT("VISUAL ARTS"), 
     SOUND_DEPT("AUDIO"); 

     private final String label; 

     private Departement(final String label) { 
      this.label = label; 
     } 

     public String getLabel() { 
      return this.label; 
     } 
    } 
} 

然後用valueOf()

+0

精彩的回答。如果這些值在設計/編譯時已知,使用枚舉是一個非常好的解決方案。 +1 – Matthias

1

試試這個

 List<String> list=new ArrayList<>(); 
     list.add("private final String PROG_DEPT = \"PROGRAMMING/ENGINEERING\";"); 
     list.add("private final String DES_DEPT = \"DESIGN/WRITING\";"); 
     list.add("private final String ART_DEPT = \"VISUAL ARTS\";"); 
     list.add("private final String SOUND_DEPT = \"AUDIO\";"); 
     String search="ART_DEPT"; 
     for (String i:list){ 
     if(i.contains(search)){ 
      System.out.println(i.split("=")[1].replaceAll(";","")); 
     } 
     } 

直播Demo這裏。你可以使用Map來做到這一點,但要做到這一點,你必須從這些字符串創建一個地圖。

0

使用地圖的概念

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

public class MajorMap { 

    /** 
    * @param args 
    */ 
    public static void main(String[] args) { 
     // TODO Auto-generated method stub 
     Map<String, String> deptMap = new HashMap<String, String>(); 
     deptMap.put("PROG_DEPT", "PROGRAMMING/ENGINEERING"); 
     deptMap.put("DES_DEPT","DESIGN/WRITING"); 
     deptMap.put("ART_DEPT","VISUAL ARTS"); 
     deptMap.put("SOUND_DEPT","AUDIO"); 
     System.out.println("ART_DEPT----->>"+deptMap.get("ART_DEPT")); 
    } 

} 
1
private String getStaticFieldValue(String fieldName){ 
    String value = null; 
    try { 
     Field field = getClass().getDeclaredField(fieldName); 
      if (Modifier.isStatic(field.getModifiers())){ 
       value = field.get(null).toString(); 
      } 
     } 
    catch (Exception e) { 
     return null; 
    } 
    return value; 
} 

你有幾種選擇如上所述:

  1. 使用地圖,使用地圖的這種情況下的缺點是,你會必須保持它,這意味着每次你需要添加/刪除/編輯你的最終靜態字段之一,你也必須編輯地圖。使用
  2. 反射作爲this post所提到的,這是我喜歡的溶液(上述的代碼片段)
相關問題