java String類型對象轉(zhuǎn)換為自定義類型對象的實現(xiàn)
問題
java String類型對象轉(zhuǎn)換為自定義類型對象
詳細問題
對于java自定義類型對象提供了toString()方法,實現(xiàn)自定義類型對象轉(zhuǎn)換為String類型對象,如何將String類型對象轉(zhuǎn)換為自定義類型對象,譬如對于如下代碼所定義的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類來實現(xiàn)從字符串到自定義類對象的轉(zhuǎn)換,下面筆者將對fromString方法進行詳細解析
1、創(chuàng)建一個新的Class對象:
Class obj = new Class();
作用:創(chuàng)建一個新的Class對象,用于存儲從字符串中解析的屬性值。
2、編譯正則表達式并創(chuàng)建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+)\}"編譯創(chuàng)建一個Pattern對象,用于匹配包含Class對象屬性的字符串。
3、創(chuàng)建Matcher對象并進行匹配:
Matcher matcher = pattern.matcher(str); if (matcher.matches()) { // 執(zhí)行屬性值的提取和設(shè)置 }
作用:使用創(chuàng)建的Pattern對象對輸入的字符串str進行匹配,然后通過matcher.matches()方法判斷是否匹配成功。
4、提取并設(shè)置屬性值:
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()方法提取匹配到的屬性值,并將其轉(zhuǎn)換為相應(yīng)的類型(如整數(shù)、雙精度浮點數(shù)、字符串等),然后使用對應(yīng)的set方法將屬性值設(shè)置到Class對象中。
5、返回解析后的Class對象:
eturn obj;
作用:返回經(jīng)過解析后的Class對象。
請注意,在使用這段代碼時,確保輸入的字符串與正則表達式的格式匹配,并且屬性值的類型與代碼中的設(shè)置相匹配。如果輸入的字符串不符合預(yù)期的格式,或者屬性值的類型轉(zhuǎn)換失敗,可能會導(dǎo)致運行時異常。
到此這篇關(guān)于java String類型對象轉(zhuǎn)換為自定義類型對象的實現(xiàn)的文章就介紹到這了,更多相關(guān)java String轉(zhuǎn)換為自定義類型內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- Java中char數(shù)組(字符數(shù)組)與字符串String類型的轉(zhuǎn)換方法
- Java List轉(zhuǎn)換成String數(shù)組幾種實現(xiàn)方式詳解
- java對象轉(zhuǎn)換String類型的三種方法
- Java如何將String轉(zhuǎn)換成json對象或json數(shù)組
- Java string類型轉(zhuǎn)換成map代碼實例
- java將String字符串轉(zhuǎn)換為List<Long>類型實例方法
- Java String轉(zhuǎn)換時為null的解決方法
- java string類型轉(zhuǎn)換boolean類型的方法
- java判斷String類型是否能轉(zhuǎn)換為int的方法
相關(guān)文章
Java動態(tài)代理機制詳解_動力節(jié)點Java學院整理
這篇文章主要為大家詳細介紹了Java動態(tài)代理機制,具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-06-06一個MIDP俄羅斯方塊游戲的設(shè)計和實現(xiàn)
一個MIDP俄羅斯方塊游戲的設(shè)計和實現(xiàn)...2006-12-12java:無法訪問org.springframework.boot.SpringApplication的解決方法
這篇文章主要給大家介紹了關(guān)于java:無法訪問org.springframework.boot.SpringApplication的解決方法,文中通過實例代碼將解決的辦法介紹的非常詳細,需要的朋友可以參考下2023-01-01詳解Java虛擬機30個常用知識點之1——類文件結(jié)構(gòu)
這篇文章主要介紹了Java虛擬機類文件結(jié)構(gòu),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2019-03-03