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对象。
请注意,在使用这段代码时,确保输入的字符串与正则表达式的格式匹配,并且属性值的类型与代码中的设置相匹配。如果输入的字符串不符合预期的格式,或者属性值的类型转换失败,可能会导致运行时异常。
到此这篇关于java String类型对象转换为自定义类型对象的实现的文章就介绍到这了,更多相关java String转换为自定义类型内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
相关文章
在IntelliJ IDEA中为自己设计的类库生成JavaDoc的方法示例
这篇文章主要介绍了在IntelliJ IDEA中为自己设计的类库生成JavaDoc的方法示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧2020-08-08@PostConstruct在项目启动时被执行两次或多次的原因及分析
这篇文章主要介绍了@PostConstruct在项目启动时被执行两次或多次的原因及分析,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教2021-08-08解读HttpServletRequestWrapper处理request数据流多次读取问题
在Java Web开发中,获取HTTP请求参数是常见需求,本文详细讨论了通过POST方式获取参数的两种主要方法:使用request.getParameter()适用于application/x-www-form-urlencoded和multipart/form-data内容类型;而对于application/json类型的数据2024-10-10
最新评论