2011-12-27 197 views
1

嗨我想將一個類的所有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 
} 
+0

是否要轉換字段名稱或它們的值? – Thomas 2011-12-27 15:06:51

+0

我想轉換字段值 – olyanren 2011-12-27 15:07:34

+1

把它們放在一個集合中,然後給這個類一個方法,'toUpperCase()',在這裏你通過集合來循環指定每個字符串的大寫字母表示。請注意,這種反射也可以解決這個問題,但每當我想到「反思」時,我想知道是否需要重新設計我的程序。無論如何,背後的動機是什麼? – 2011-12-27 15:07:53

回答

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

快速** **確實......實際上,這絕對不是採取的方法。 – mre 2011-12-27 15:20:33

+0

@Tudor,謝謝 – olyanren 2011-12-27 15:21:52

+0

這比在課堂上做這件事更有效嗎?反思並不便宜.. – 2011-12-27 19:40:55

1

你可以做到這一點使用反射,但是這將是醜陋的和緩慢的。 使用ConvertStringToUppercase.class.getDeclaredFields()獲取Field對象。然後使用field.getType() == String.class來確定字段是否爲字符串類型。

然後使用field.get(this)獲取大寫的字符串,然後使用field.set(this, upperCaseString)將字段設置爲新值。

+1

您可以緩存字符串類型的Field對象列表,以便在執行多個調用時跳過前兩個步驟。 – 2011-12-27 15:12:37

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(), 
              // ...); 
    } 
} 

請務必檢查空如果字段爲空。

+0

+1這個答案几乎涵蓋了一切,包括空檢查。 :D – mre 2011-12-27 15:16:36

+0

@mre我看不到空格檢查:) - 它仍然是最乾淨的方法之一。 (+1) – Thomas 2011-12-27 15:21:44

+0

@Thomas,*如果字段爲空,請務必檢查爲空*:D – mre 2011-12-27 15:22:09

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();} 
相關問題