如何将Class的所有String字段转换为大写

时间:2011-12-27 15:04:16

标签: java

您好我想将一个类的所有String字段值转换为大写格式。我怎样才能做到这一点?请帮忙。

示例:

public class ConvertStringToUppercase{
    private String field1; //to be converted Uppercase
    private String field2; //to be converted Uppercase
    private String field3; //to be converted Uppercase
    ...... //more fields
} 

4 个答案:

答案 0 :(得分:4)

public class ConvertStringToUppercase{
    private String field1; //to be converted Uppercase
    private String field2; //to be converted Uppercase
    private String field3; //to be converted Uppercase

    public void toUpperCase() {
        this.field1 = this.field1.toUpperCase();
        this.field2 = this.field2.toUpperCase();
        this.field3 = this.field3.toUpperCase();
        // ...
    }
}

或者,如果你想要不变性:

public class ConvertStringToUppercase{
    private String field1; //to be converted Uppercase
    private String field2; //to be converted Uppercase
    private String field3; //to be converted Uppercase

    public ConvertStringToUppercase toUpperCase() {
        return new ConvertStringToUppercase(this.field1.toUpperCase(),
                                            this.field2.toUpperCase(),
                                            this.field3.toUpperCase(),
                                            // ...);
    }
}

如果字段可以为空,请务必检查null。

答案 1 :(得分:3)

try {
    ConvertStringToUppercase testClass = new ConvertStringToUppercase();
    for (Field field : testClass.getClass().getDeclaredFields()) {
          if (field.getType().equals(String.class)) {
            if (!field.isAccessible()) 
                field.setAccessible(true);
            if (field.get(testClass) != null && ((String) field.get(testClass)).trim() != "") {                          
                field.set(testClass, ((String) field.get(testClass)).toUpperCase());
            }
          }  
    }
} catch (Exception e) {e.printStackTrace();}

答案 2 :(得分:2)

您可以将反射用于快速和脏解决方案:

ConvertStringToUpperCase t = new ConvertStringToUpperCase();
for(Field f: t.getClass().getDeclaredFields()) {            
    if(f.getType().equals(String.class)) {              
        f.setAccessible(true);
        f.set(t, ((String)f.get(t)).toUpperCase());
    }           
}

然而,这不是一个好方法,因为不应该以这种方式修改私有字段。

答案 3 :(得分:1)

你可以用反射来做,但它会很丑陋而且很慢。 使用ConvertStringToUppercase.class.getDeclaredFields()获取Field个对象。然后使用field.getType() == String.class确定字段何时为String类型。

然后使用field.get(this)获取字符串,大写字母,然后使用field.set(this, upperCaseString)将字段设置为新值。