有一个User类  有4个属性  firstname、lastname、phont、address。
然后有一个字符串,格式为"field1\tvalue1\nfield2\tvalue2\n...." 比如“firstname\tzs\nlastname\tls\nphont\t5467546\naddress\tshanghai\n"怎么样把字符串解析出来并封装成一个 user对象?             很穷,没分。多谢指导!!

解决方案 »

  1.   

    String test = "firstname\tzs\nlastname\tls\nphont\t5467546\naddress\tshanghai\n";
    String []pairs = test.split(‘\');
    User user = new User();
    如果格式固定,可以直接按顺序set字段变量
    如果不固定,得使用反射
      

  2.   

    String test = "firstname\tzs\nlastname\tls\nphont\t5467546\naddress\tshanghai\n";
    String []pairs = test.split("\n");
    for(int i=0;i<pairs.length;i++){
    System.out.println(pairs[i]);
    }解析结果为:
    firstname zs
    lastname ls
    phont 5467546
    address shanghai然后再用:split("\t")解析上面的结果,存入即可User即可!!!
      

  3.   

    String test = "firstname\tzs\nlastname\tls\nphont\t5467546\naddress\tshanghai\n";
    String []pairs = test.split("\n");
    for(int i=0;i<pairs.length;i++){
    System.out.println(pairs[i]);
    }执行结果:
    firstname zs
    lastname ls
    phont 5467546
    address shanghai然后对上面的结果,每组都用split("\t");解析即可!!!
      

  4.   

    public class User { public static void main(String[] args) {
    User user = null;
    String str = "firstname\tzs\nlastname\tls\nphont\t5467546\naddress\tshanghai";
    Pattern p = Pattern.compile("([^\\t\\r\\n]+)\\t([^\\t\\r\\n]+)");
    Matcher m = p.matcher(str);
    while (m.find()) {
    if (user == null) user = new User();
    String field = m.group(1);
    String value = m.group(2);

    // 调用其 setXXX 函数
    String methodName = "set" + Character.toUpperCase(field.charAt(0)) + field.substring(1);
    try {
    Method method = User.class.getMethod(methodName, new Class[]{String.class});
    method.invoke(user, new Object[]{value});
    } catch (Exception e) { e.printStackTrace(); } /*
    // 直接访问其私有属性, 但不建议这么用
    try {
    Field theField = User.class.getDeclaredField(field);
    theField.setAccessible(true);
    theField.set(user, value);
    } catch (Exception e) { e.printStackTrace(); }
    */
    }
    System.out.println(user.getFirstname());
    } private String firstname;
    private String lastname;
    private String phont;
    private String address;
    public String getFirstname() {
    return this.firstname;
    }
    public void setFirstname(String firstname) {
    this.firstname = firstname;
    }
    public String getLastname() {
    return this.lastname;
    }
    public void setLastname(String lastname) {
    this.lastname = lastname;
    }
    public String getPhont() {
    return this.phont;
    }
    public void setPhont(String phont) {
    this.phont = phont;
    }
    public String getAddress() {
    return this.address;
    }
    public void setAddress(String address) {
    this.address = address;
    }
    }