本帖最后由 chongworm 于 2012-06-28 06:56:59 编辑

解决方案 »

  1.   

    第一种方法:
    1、如果给出的字符串是你自己定义的规则,那么你自己解析成Map<String,Object> 这种形式,key是属性名,value是属性值
    2、用反射嗲用Bean的set方法,把值弄进去 或者 用Spring的BeanUtils,Apache的BeanUtils貌似不支持Map拷贝第二种方法:
    给出的字符串统一用JSON 或者 XML的格式,(建议这么用)
    然后用别的开源项目,如 XStream、Jackson、json-lib 之类的去解析,网上有例子的,你可以找一下 
      

  2.   

    先通过“,”将字符串分割成数组,然后再对数组每一项用‘=’分割成数组,最终分割成
    String[][] userinfo = {{userID,12},{UserName,Zhaomin}...};
    然后用反射通过字符串(userinfo[i][0])查找对应的属性,然后将值(userinfo[i][1])注入到属性中。
      

  3.   

    String userInfo = "userID=12,userName='Zhaomin'";
    先将该字符串分割,得到userID和userName的值,然后通过get/set方法设置
      

  4.   

    如果字符串中的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;
    }
    }
      

  5.   

    利用反射!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;
    }
    }
      

  6.   

    有这么复杂吗 还反射  用错地方了,
    直接 把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("'", ""));
    }
      

  7.   

    这个就得用反射。
    刚好看到一篇文章,几行代码就搞定了,可以看看
    http://www.javafan.org/article.do?id=bac034c6380ad47d01383378d71d000d