当前位置:编程学习 > JAVA >>

请教: 如何根据字符串值动态给JAVA成员变量赋值

--------------------编程问答-------------------- 第一种方法:
1、如果给出的字符串是你自己定义的规则,那么你自己解析成Map<String,Object> 这种形式,key是属性名,value是属性值
2、用反射嗲用Bean的set方法,把值弄进去 或者 用Spring的BeanUtils,Apache的BeanUtils貌似不支持Map拷贝

第二种方法:
给出的字符串统一用JSON 或者 XML的格式,(建议这么用)
然后用别的开源项目,如 XStream、Jackson、json-lib 之类的去解析,网上有例子的,你可以找一下  --------------------编程问答-------------------- 先通过“,”将字符串分割成数组,然后再对数组每一项用‘=’分割成数组,最终分割成
String[][] userinfo = {{userID,12},{UserName,Zhaomin}...};
然后用反射通过字符串(userinfo[i][0])查找对应的属性,然后将值(userinfo[i][1])注入到属性中。 --------------------编程问答-------------------- String userInfo = "userID=12,userName='Zhaomin'";
先将该字符串分割,得到userID和userName的值,然后通过get/set方法设置 --------------------编程问答-------------------- 如果字符串中的userID和userName与java类中的成员变量名一致的话可以自己裁分字符串,然后调用set方法赋值。
public class Demo28 {

/**
 * @param args
 */
public static void main(String[] args) {
String userInfo = "userID=12,userName=Zhaomin'";
UserInfo info = new Demo28().setInfo(userInfo, new UserInfo());
System.out.println(info.getUserID());
System.out.println(info.getUserName());
}

public UserInfo setInfo(String userInfo, UserInfo user) {
String[] info = userInfo.split(",");
if (info.length != 2) return user;
if ("userID".equals(info[0].substring(0, info[0].indexOf("=")))) {
String id = info[0].substring(info[0].indexOf("=")+1);
// 如果id不是整数,id默认为0
user.setUserID(id.matches("\\d+") ? Integer.parseInt(id) : 0);
}
if ("userName".equals(info[1].substring(0, info[1].indexOf("=")))) {
String name = "";
// userName='Zhaomin', userName='Zhaomin, userName=Zhaomin', userName=Zhaomin四种情况
name = info[1].contains("='") ? info[1].substring(info[1].indexOf("'")+1) : info[1].substring(info[1].indexOf("=")+1);
name = name.endsWith("'") ? name.substring(0, name.length() - 1) : name;
user.setUserName(name);
}
return user;
}
}
--------------------编程问答-------------------- 利用反射!

package com;

import java.io.IOException;
import java.lang.reflect.Field;

public class Test {

public static void main(String[] args) throws IOException {
String userInfo = "userID=12,userName=Zhaomin";
String[] params = userInfo.split(",");
String[] fields = new String[params.length]; 
String[] values = new String[params.length]; 
for(int i = 0; i < params.length; i++){
String param = params[i];
String[] strs = param.split("=");
String field = null;
String value = null;
if(strs.length > 0){
field = strs[0];
}
if(strs.length > 1){
value = strs[1];
}
fields[i] = field;
values[i] = value;
}

Class<UserInfo> c = UserInfo.class;
UserInfo ui = null;
try {
ui = c.newInstance();
for(int i = 0; i < fields.length; i++){
String fieldName = fields[i];
String value = values[i];
// String setMethodName = "set" + fieldName.substring(0, 1).toUpperCase() + fieldName.substring(1);
Field field = c.getDeclaredField(fieldName);
field.setAccessible(true);
if("int".equalsIgnoreCase(field.getType().toString())){
field.setInt(ui, Integer.parseInt(value));
}else if("long".equalsIgnoreCase(field.getType().toString())){
field.setLong(ui, Long.parseLong(value));
//基本类型自己去判断了
}else{
field.set(ui, field.getType().cast(value));
}
}
} catch (SecurityException e) {
e.printStackTrace();
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (InstantiationException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (NoSuchFieldException e) {
e.printStackTrace();
}
System.out.println(ui.getUserID() + " : " + ui.getUserName());
}

}

class UserInfo {
private int userID;
private String userName;

public UserInfo(){}

public int getUserID() {
return userID;
}

public void setUserID(int userID) {
this.userID = userID;
}

public String getUserName() {
return userName;
}

public void setUserName(String userName) {
this.userName = userName;
}
}

--------------------编程问答-------------------- 5楼正解 --------------------编程问答-------------------- 有这么复杂吗 还反射  用错地方了,
直接 把pojo new出来 把解析到的数据set进去就好了啊

 String s = "userID=12,userName='Zhaomin'" ;
   String ss [] = s.split(",") ;
   UserInfo user =  new UserInfo();

   for (int i = 0; i < ss.length; i++) {
String sss [] = ss[i].split("=") ;

if(userIDs[0].equals("userID")) {
user.setUserID(new Integer(sss[1]));
}
          if(userIDs[0].equals("userName")) {
           user.setUserName(sss[1].replaceAll("'", ""));
}

--------------------编程问答-------------------- 反射机制。。 --------------------编程问答-------------------- 为什么大伙儿在这个地方那么喜欢用反射???是受一楼的影响么? --------------------编程问答-------------------- 这个就得用反射。
刚好看到一篇文章,几行代码就搞定了,可以看看
http://www.javafan.org/article.do?id=bac034c6380ad47d01383378d71d000d
补充:Java ,  Java SE
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,