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

Java 如何检查变量名是否包含字符串,然后输出字符串变量内容,java,string,Java,String,我有这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"; 我想做的是得到一个字符串,并将其与变量进行比较,然后输出变量包含的内容(如果它等于

我有这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字符串数组或列表中,但我真的不确定如何做我想做的事情,你需要使用的是一张地图

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");
}

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

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

import java.lang.reflect.Field;
公开课问题{
私人最终字符串PROG_DEPT=“编程/工程”;
私有最终字符串DES_DEPT=“设计/编写”;
私人最终弦乐艺术_DEPT=“视觉艺术”;
私人最终字符串声音\u DEPT=“AUDIO”;
公共静态void main(字符串…参数)抛出IllegalArgumentException、IllegalAccessException、InstanceionException{
System.out.println(reflectValue(“艺术部”,SOQuestion.class));
System.out.println(反射值(“COMP_DEPT”,SOQuestion.class));
}
公共静态字符串reflectValue(字符串变量,类对象)抛出IllegalArgumentException、IllegalAccessException、InstanceionException{
Field[]fs=thing.getDeclaredFields();
对于(int i=0;i

第一个打印
“ATR\u DEPT”
的请求将打印
视觉艺术
,第二个对不存在的
“COMP\u DEPT”
的请求将返回null

您要查找的数据类型是
Map

Map departmentNames=newhashmap();
部门名称。put(“项目部”、“规划/工程”);
部门名称。填写(“设计/写作部门”);
//……等等。。。
//...
字符串dept=“PROG\u dept”;
String deptName=departmentNames.get(dept);
System.out.println(部门名称)//输出“编程/工程”

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

获取一个键的绑定,我将使用一个枚举:

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

      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(";",""));
         }
      }
List List=new ArrayList();
添加(“私有最终字符串PROG\u DEPT=\”编程/工程\“;”);
添加(“私有最终字符串DES_DEPT=\”设计/编写\“;”);
添加(“私人最终字符串艺术部=\“视觉艺术”;”;
添加(“私人最终字符串声音\ u DEPT=\“AUDIO\”;”;
字符串搜索=“艺术部”;
for(字符串i:列表){
如果(i.包含(搜索)){
System.out.println(i.split(“=”[1].replaceAll(“;”,”);
}
}
住在这里。您可以使用Map来实现这一点,但要实现这一点,您必须从这些字符串创建一个Map。

使用Map的概念

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")); 
    }

}
import java.util.HashMap;
导入java.util.Map;
公共类专业地图{
/**
*@param args
*/
公共静态void main(字符串[]args){
//TODO自动生成的方法存根
Map deptMap=newhashmap();
部门计划书(“项目部”、“规划/工程”);
部门名称(“设计/写作部门”);
部门地图放置(“艺术部门”、“视觉艺术”);
部门映射put(“声音部门”、“音频”);
System.out.println(“艺术部------->”+部门映射获取(“艺术部”);
}
}
如上所述,您没有几个选项:

  • 使用映射,在这种情况下使用映射的缺点是您必须维护它,这意味着每次需要添加/删除/编辑最终静态字段之一时,您也必须编辑映射
  • 使用中提到的反射,这是我最喜欢的解决方案(上面的代码片段)

  • 这会得到字符串的第二部分吗?@exike:如果你说的“第二部分”是指上面常量中的值,那么是的。答案很好。如果这些值在设计/编译时已知,那么使用enum是一个非常好的解决方案+1.
    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;
            }
        }
    }
    
          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(";",""));
             }
          }
    
    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")); 
        }
    
    }
    
    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;
    }