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 的变量,然后输出“VISUAL ARTS”

我正在考虑将其放入 2D 字符串数组或列表中,但我不确定如何做我想做的事情

4

8 回答 8

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"

AMap将唯一键绑定到值。在这种情况下,两者都有类型String。您使用添加绑定put(key, value)并使用获取键的绑定get(key)

于 2013-08-20T05:12:28.170 回答
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()

于 2013-08-20T05:15:40.437 回答
4

您可能想要使用Map某种HashMap<String,String>. Map我建议您阅读接口和HashMap类的 Javadocs 。

于 2013-08-20T05:11:53.933 回答
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) );
于 2013-08-20T05:11:48.863 回答
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(";",""));
         }
      }

现场演示在这里。您可以使用 Map 来做到这一点,但要做到这一点,您必须从这些字符串创建一个映射。

于 2013-08-20T05:17:31.313 回答
1

听起来您正在寻找反射(或者如果您想使用不同的数据类型而不是在类中查找变量然后 a 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;

于 2013-08-20T05:11:55.640 回答
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. 使用 Map ,在这种情况下使用地图的缺点是您必须维护它,这意味着每次您需要添加/删除/编辑最终静态字段之一时,您都必须编辑地图也是。
  2. 使用本文中提到的反射这是我最喜欢的解决方案(上面的代码片段)
于 2013-08-20T05:56:54.110 回答
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")); 
    }

}
于 2013-08-20T05:25:16.363 回答