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

news2024/12/22 13:58:24

问题

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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/610011.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Android:Selector + Layer-lists 实现 AppCompatCheckBox

最近做项目涉及到一些UI相关的东东,虽然比较简单,但是也很有趣,写两篇简短的博客记录一下。 一."Selector 两张图片"实现 AppCompatCheckBox AppCompatCheckBox 是 androidx的一个widget:androidx.appcompat.widget.…

chatgpt赋能python:Python图中打字的SEO文章:让你的图片说出更多的话

Python图中打字的SEO文章:让你的图片说出更多的话 图片是传达信息的有力工具。不过,当你在网站上发布图片的时候,这张图片就很可能会被浏览器、机器学习算法、甚至是一些视觉障碍用户忽略。为了弥补这个缺陷,我们可以使用Python来…

chatgpt赋能python:Python回退快捷键:让你的编程更迅速高效

Python回退快捷键:让你的编程更迅速高效 作为一名有10年Python编程经验的工程师,我深知Python回退快捷键对于编程的重要性。当你在编写代码时,可能会出现需要回退或者修改之前的代码的情况,在这种情况下,如果你没有使…

用代码认识整型提升与unsigned signed

🤩本文作者:大家好,我是paperjie,感谢你阅读本文,欢迎一建三连哦。 🥰内容专栏:这里是《C语言》专栏,笔者用重金(时间和精力)打造,基础知识一网打尽,希望可以…

[架构之路-206]- 常见的需求分析技术:UML图概览

UML(Unified Modeling Language)是一种统一建模语言,为面向对象开发系统的产品进行说明、可视化、和编制文档的一种标准语言。下面将对UML的九种图包图的基本概念进行介绍以及各个图的使用场景。 一、基本概念   如下图所示,U…

3. 响应状态码及Response对象的status_code属性

3. 响应状态码及Response对象的status_code属性 文章目录 3. 响应状态码及Response对象的status_code属性1. 响应状态码2. 响应状态码共分为5种类型2.1 1xx(临时响应)2.2 2xx (成功)2.3 3xx (重定向)2.4 4x…

一个小时入门 Android Compose 动画

0. 前言 前段时间对于Android中的Compose动画做了系统性的学习,相关文章发布在 Compose 动画 专栏里。系统性学完Compose动画后,又对此做了系统性的回顾,抽取其比较重要的部分,希望能帮助大家快速入门Compose动画,所…

6. JVM调优工具详解及调优实战

JVM性能调优 1. 前置启动程序1.1 Jmap1.1.1 Jmap查询内存信息1.1.2 Jmap查询堆信息1.1.3 jmap查询堆内存dump 1.2 Jstack1.3 远程连接jvisualvm 本文是按照自己的理解进行笔记总结,如有不正确的地方,还望大佬多多指点纠正,勿喷。 课程内容&am…

Postman工具使用

Postman 是什么 Postman 是一款 API 开发协作工具,它可以帮助你测试和开发 API,Postman 提供了测试 API 的友好界面和功能,使用简单便捷,安全可靠。Postman 是每一位前后端开发者必掌握的开发工具。 如何安装 Postman 官网安装…

【Linux】Apache 网页安全优化与日志分割

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 Apache 网页安全优化与日志分割 一、网页安全优化1.Apache 网页压缩2.Apache 网页缓存3.Apache 隐藏版本信息4.Apache 防盗链 二、rotatelogs 分割1.修改apache服务的主配置文…

chatgpt赋能python:Python图片保存及优化SEO的方法

Python图片保存及优化SEO的方法 对于一个网站,图片占据了网页中的很大一部分,因此如何在保证图片质量不失真的情况下,保证网页加载速度的快速呈现,是很多网站开发者需要考虑的一点。 在使用Python进行网站开发时,如何…

git基础教程(18)git stash暂存本地修改

文章目录 git stash pushgit stash listgit stash popgit stash applygit stash showgit stash drop 序号git stash cleargit stash pop冲突解决git stash 命令是 Git 中一个非常实用的命令,它可以让开发者暂时存储当前工作区的内容而不必提交代码或创建新分支,得到一个干净的…

Redisson分布式锁使用

一、使用 RedisTemplate 操作分布式锁 原子加锁(uuid Value过期时间)原子解锁(lua脚本)加长过期时间 UUID :让锁区分,防止错删其他锁设置锁过期时间:当业务异常导致无法释放锁形成锁死,设置过期时间自动释…

【机器学习】集成学习(实战)

集成学习(实战) 目录 一、准备工作(设置 jupyter notebook 中的字体大小样式等)二、集成算法的基本思想三、集成算法的简单实现:硬投票与软投票1、构建测试数据集2、硬投票3、软投票 四、集成学习:Bagging …

chatgpt赋能python:Python图片定位:优化SEO的关键技术

Python图片定位:优化SEO的关键技术 在现代搜索引擎优化中,图片已成为吸引用户眼球和提升网站排名的关键元素之一。而Python作为一种功能强大的编程语言,在图片定位和SEO优化方面也具备很大的优势。 Python图片定位的基本原理 在Python中&a…

JAVA中.equals()与 ==的区别

1. “”是运算符,如果是基本数据类型,则比较存储的值;如果是引用数据类型,则比较所指向对象的地址值。 2..equals() equals是Object的方法,比较的是所指向的对象的地址值,一般情况下,重写之后比…

(五)Langchain PGVector 补充智能客服匹配式问答

文章目录 资料背景目标FAQ-匹配式问答安装PGVector 向量数据库text2vec-large-chineseLangchain-PGVector测试向量化文本写入QA问答对特别注意问题langchain pgvector表和数据相识性问题匹配 结论 资料 NLP领域五大QA问答场景总结:FQA、DOC-QA、KBQA、TableQA、Tas…

html+css+js实现的web小案例

上完了Web开发基础的课程之后,做了这么一个小案例作为课程的大作业。这个案例是静态页面,使用的技术有htmlcssjs,主要的知识点有页面的打开关闭、页面跳转、超链接、图片和音频的使用、轮播图、js函数等等。本案例的主要内容是注册、登陆之后…

PostgreSQL清理dead tuples(vacuum和vacuum full)

前言 PostgreSQL的并发控制,采用MVCC(多版本并发控制)进行处理。这种机制有一个缺点:随着时间的推移,数据文件中积累的dead tuples(死数据/死元组)会越来越多。 在清理dead tuples时&#xff…

redis第五第六章-redis并发缓存架构和性能优化

一、缓存设计 1.缓存穿透 缓存穿透是指查询一个根本不存在的数据, 缓存层和存储层都不会命中, 通常出于容错的考虑, 如果从存储层查不到数据则不写入缓存层。 缓存穿透将导致不存在的数据每次请求都要到存储层去查询, 失去了缓存…