有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何检查变量名是否包含字符串,然后输出字符串变量内容

我有这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字符串数组或列表中,但我不确定该怎么做


共 (6) 个答案

  1. # 1 楼答案

    听起来像是在寻找反射(或者如果希望使用不同的数据类型,而不是在类中查找变量,则使用Map<String, String>)。看起来映射方法已经被很好地涵盖了,所以这只是因为我感兴趣,这里是反射方法(不是说这不是解决这个问题的最佳方法,而是因为您要求检查变量是否存在,然后获取它的值)

    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

  2. # 2 楼答案

    试试这个

          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来实现这一点,但要实现这一点,您必须从这些字符串创建一个Map

  3. # 3 楼答案

    我会使用枚举:

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

  4. # 4 楼答案

    您要查找的数据类型是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"
    

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

  5. # 5 楼答案

    你需要的是一张地图

    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) );
    
  6. # 6 楼答案

    您可能希望使用某种Map,例如HashMap<String,String>。我建议您阅读Map接口和HashMap类的Javadocs