黑马程序员技术交流社区

标题: 将任意一个对象中String字符串内容中的“b”改成“a” [打印本页]

作者: 李玉生    时间: 2012-10-4 14:04
标题: 将任意一个对象中String字符串内容中的“b”改成“a”
package cn.itcast.heima;
import java.lang.reflect.Field;

/*
* 将任意一个对象中的所有String类型的成员变量所对应的字符串内容中的“b”改成“a”
* 例如:ball-->aall,
*/
public class ChangeString {
/**
  * @param args
  */
public static void main(String[] args) {
  //创建一个StringValue的实例化对象
  StringValue stv = new StringValue("ball","basketball","back");
  //在调用ChangeStringValue()时,对该方法抛出的异常进行处理
  try {
   ChangeStringValue(stv);
  } catch (Exception e) {
   // 输出异常信息
   e.printStackTrace();
  }
  /*
   * 输出:
   * StringValue [str1=aall, str2=aasketaall, str3=aack]
   */
  System.out.println(stv);
}
private static void ChangeStringValue(Object obj) throws Exception {
  /*
   * 获得Class对象,调用Class对象的getDeclaredFields()方法,
   * 返回此Class对象所表示的类的指定属性(Field),与属性的访问级别无关。
   */
  /*
   * 如果这样写:Field[] fields = obj.getClass().getFields();
   * 则输出 :StringValue [str1=aall, str2=basketball, str3=back]
   * 只改变了用public修饰的StringValue,
   */
  Field[] fields = obj.getClass().getDeclaredFields();

    //遍历所有的字段信息
   for(Field field :fields){
    /*
     * if(field.getType().equals(String.class));
     * 用equals在此比较其语意不明确
    * 比较字节码要用等号比
     */
   
    if(field.getType() == String.class){
     //设置可以访问私有变量的权限
     field.setAccessible(true);
     //获取原来存放的StringValue
     String oldValue = (String) field.get(obj);
     
     /*
      * replace(char oldChar, char newChar) -->newString
      * 返回一个新的字符串,它是通过用 newChar 替换此字符串中出现的所有 oldChar 得到的。
      */
     String newValue = oldValue.replace('b', 'a');
     /*
      * set(Object obj, Object value)
      * 将指定对象变量上此 Field 对象表示的字段设置为指定的新值。
      */
     field.set(obj, newValue);
    }
   }
  
}
}

package cn.itcast.heima;
public class StringValue {
//定义三个String变量
public String str1 ;
private String str2;
private String str3;
/*
  * 写一个StringValue的构造方法,传入三个String变量
  */
public StringValue(String str1, String str2, String str3) {
  super();
  this.str1 = str1;
  this.str2 = str2;
  this.str3 = str3;
}
/*
  *重写toString()方法
  * (non-Javadoc)
  * @see java.lang.Object#toString()
  */
@Override
public String toString() {
  return "StringValue [str1=" + str1 + ", str2=" + str2 + ", str3="
    + str3 + "]";
}
}







欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2