java String类型对象转换为自定义类型对象的实现
作者:飞滕人生TYF
问题
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对象。
请注意,在使用这段代码时,确保输入的字符串与正则表达式的格式匹配,并且属性值的类型与代码中的设置相匹配。如果输入的字符串不符合预期的格式,或者属性值的类型转换失败,可能会导致运行时异常。
到此这篇关于java String类型对象转换为自定义类型对象的实现的文章就介绍到这了,更多相关java String转换为自定义类型内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!