用反射更改一个类中所有字符串里面的某个字符为一个其他字符

package com.sjl.reflect;

import java.lang.reflect.Field;

 class ReflectPoint {
 public String str1 = "I love you ";
 public String str2 = "I love you mama ";
 public String str3 = "I am xiao shen";
 @Override
 public String toString() {
  return "ReflectPoint [str1=" + str1 + ", str2=" + str2 + ", str3="
    + str3 + "]";
 }
 

}
public class TestDemo {
 public static void main(String[] args) {
  ReflectPoint reflectpoint = new ReflectPoint();//声明一个对象
  try {
   changeStringValue(reflectpoint);//调用changeStringValue方法
   System.out.println(reflectpoint);
  } catch (Exception e) {
   e.printStackTrace();
  }
 }

 private static void changeStringValue(Object obj) throws Exception{
  Field [] fields = obj.getClass().getFields();//Field提供有关类或者接口的字段信息
  for(Field field:fields){
   //遍历查找是否有String类型
   if(field.getType()==String.class){//此处的等号用equals也行 但是==更专业  因为string字节码只有一份。
    String oldstr = (String)field.get(obj);
    String newstr = oldstr.replace('I',
's');  //调用replace方法,更改字符
    field.set(obj, newstr);//get之后还应该把更改后的字符串set给更改对象
   }
  }
 }
}

能把ReflectPoint类里面所有的string里面的I改成s

运行结果:

ReflectPoint [str1=s love you , str2=s love you mama , str3=s am xiao shen]

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值