繁体   English   中英

如何从另一个字符串获取一个字符串值

[英]How to get an String value from another String

这听起来很奇怪,但实际上很简单。

简短说明:我有一个名为的类变量

public static final String ACCELEROMETER_X = "AccX";

在一个函数中,我执行了此操作,该操作从枚举中获取“ ACCELEROMETER_X”(传感器是枚举的arrayList)。

for i...
    columns = columns + sensors.get(i).name()

关键是我想在列中引入的不是“ ACCELEROMETER_X”,而是“ AccX”。 任何想法? 我知道我可以使用switch和case来做到这一点,但是我的枚举有30多个值,因此Id宁愿选择其他“更干净”的方式来做到这一点。

如果希望用该字符串值替换enum常量,则更好的方法是将该字符串保留为enum本身中的字段:

enum Sensor {
    ACCELEROMETER_X("AccX"),
    // Other constants
    ;

    private final String abbreviation;

    private Sensor(final String abbreviation) {
        this.abbreviation = abbreviation;
    }

    @Override
    public String toString() {
        return abbreviation;
    }
}

而不是:

sensors.get(i).name()

用这个:

sensors.get(i).toString()

解决方案1:如果将价值保留在课堂上

创建一个键为id(ACCELEROMETER_X),值为“ AccX”的Map,当您从Enum中获取值时,使用name()作为键从地图中查找值。

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

map.put("ACCELEROMETER_X","AccX");

//some place where you want value from name
map.get(enumInstance.name());

解决方案2:更改枚举(更可取)

enum Some{

   ACCELEROMETER_X("AccX");

}

在您的enum添加此

public String getAccelerometerX (){
    return ACCELEROMETER_X ;
}

接着:

for i... columns = columns + sensors.get(i).getAccelerometerX ()

我认为您要尝试的是从String中具有的字段名称中获取字段的值,如果是这种情况,则可以执行以下操作:

public static final String ACCELEROMETER_X = "AccX";

// ...

Field field = MyClassName.class.getField("ACCELEROMETER_X");
String value = (String)field.get(new MyClassName());

System.out.println(value); // prints "AccX"

当然,您必须捕获一些异常。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM