java String类型对象转换为自定义类型对象

问题

java String类型对象转换为自定义类型对象

详细问题

对于java自定义类型对象提供了toString()方法,实现自定义类型对象转换为String类型对象,如何将String类型对象转换为自定义类型对象,譬如对于如下代码所定义的Class类

package com.iflytek.bms.domain;

import java.math.BigDecimal;
import java.sql.Timestamp;

public class Class {

    private Integer integer;

    private Double aDouble;

    private String string;

    private Timestamp timestamp;

    private BigDecimal bigDecimal;

    public Integer getInteger() {
        return integer;
    }

    public void setInteger(Integer integer) {
        this.integer = integer;
    }

    public Double getaDouble() {
        return aDouble;
    }

    public void setaDouble(Double aDouble) {
        this.aDouble = aDouble;
    }

    public String getString() {
        return string;
    }

    public void setString(String string) {
        this.string = string;
    }

    public Timestamp getTimestamp() {
        return timestamp;
    }

    public void setTimestamp(Timestamp timestamp) {
        this.timestamp = timestamp;
    }

    public BigDecimal getBigDecimal() {
        return bigDecimal;
    }

    public void setBigDecimal(BigDecimal bigDecimal) {
        this.bigDecimal = bigDecimal;
    }

    @Override
    public String toString() {
        return "Class{" +
                "integer=" + integer +
                ", aDouble=" + aDouble +
                ", string='" + string + '\'' +
                ", timestamp=" + timestamp +
                ", bigDecimal=" + bigDecimal +
                '}';
    }
}

解决方案

package com.iflytek.bms.domain;

import java.math.BigDecimal;
import java.sql.Timestamp;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class Class {

    private Integer integer;

    private Double aDouble;

    private String string;

    private Timestamp timestamp;

    private BigDecimal bigDecimal;

    public Integer getInteger() {
        return integer;
    }

    public void setInteger(Integer integer) {
        this.integer = integer;
    }

    public Double getaDouble() {
        return aDouble;
    }

    public void setaDouble(Double aDouble) {
        this.aDouble = aDouble;
    }

    public String getString() {
        return string;
    }

    public void setString(String string) {
        this.string = string;
    }

    public Timestamp getTimestamp() {
        return timestamp;
    }

    public void setTimestamp(Timestamp timestamp) {
        this.timestamp = timestamp;
    }

    public BigDecimal getBigDecimal() {
        return bigDecimal;
    }

    public void setBigDecimal(BigDecimal bigDecimal) {
        this.bigDecimal = bigDecimal;
    }

    @Override
    public String toString() {
        return "Class{" +
                "integer=" + integer +
                ", aDouble=" + aDouble +
                ", string='" + string + '\'' +
                ", timestamp=" + timestamp +
                ", bigDecimal=" + bigDecimal +
                '}';
    }
    
    public static Class fromString(String str) {
        Class obj = new Class();
        Pattern pattern = Pattern.compile("Class\\{integer=(\\d+), aDouble=(\\d+\\.\\d+), string='(.*?)', timestamp=(.*?), bigDecimal=(\\d+\\.\\d+)\\}");
        Matcher matcher = pattern.matcher(str);
        if (matcher.matches()) {
            obj.setInteger(Integer.parseInt(matcher.group(1)));
            obj.setaDouble(Double.parseDouble(matcher.group(2)));
            obj.setString(matcher.group(3));
            obj.setTimestamp(Timestamp.valueOf(matcher.group(4)));
            obj.setBigDecimal(new BigDecimal(matcher.group(5)));
        }
        return obj;
    }

}

解决原因

笔者使用正则表达式和Java的Matcher类来实现从字符串到自定义类对象的转换,下面笔者将对fromString方法进行详细解析
1、创建一个新的Class对象:

Class obj = new Class();

作用:创建一个新的Class对象,用于存储从字符串中解析的属性值。
2、编译正则表达式并创建Pattern对象:

Pattern pattern = Pattern.compile("Class\\{integer=(\\d+), aDouble=(\\d+\\.\\d+), string='(.*?)', timestamp=(.*?), bigDecimal=(\\d+\\.\\d+)\\}");

使用正则表达式"Class\{integer=(\d+), aDouble=(\d+\.\d+), string='(.?)', timestamp=(.?), bigDecimal=(\d+\.\d+)\}"编译创建一个Pattern对象,用于匹配包含Class对象属性的字符串。
3、创建Matcher对象并进行匹配:

Matcher matcher = pattern.matcher(str);
if (matcher.matches()) {
  // 执行属性值的提取和设置
}

作用:使用创建的Pattern对象对输入的字符串str进行匹配,然后通过matcher.matches()方法判断是否匹配成功。
4、提取并设置属性值:

obj.setInteger(Integer.parseInt(matcher.group(1)));
obj.setaDouble(Double.parseDouble(matcher.group(2)));
obj.setString(matcher.group(3));
obj.setTimestamp(Timestamp.valueOf(matcher.group(4)));
obj.setBigDecimal(new BigDecimal(matcher.group(5)));

作用:如果匹配成功,通过matcher.group()方法提取匹配到的属性值,并将其转换为相应的类型(如整数、双精度浮点数、字符串等),然后使用对应的set方法将属性值设置到Class对象中。
5、返回解析后的Class对象:

eturn obj;

作用:返回经过解析后的Class对象。

请注意,在使用这段代码时,确保输入的字符串与正则表达式的格式匹配,并且属性值的类型与代码中的设置相匹配。如果输入的字符串不符合预期的格式,或者属性值的类型转换失败,可能会导致运行时异常。

参考文献

chatgpt

原创不易
转载请标明出处
如果对你有所帮助 别忘啦点赞支持哈
在这里插入图片描述

你可能感兴趣的:(java,servlet,jvm)