使用String轉(zhuǎn)換到Map結(jié)構(gòu)
String轉(zhuǎn)換到Map結(jié)構(gòu)
下面的僅限于個人測試
最近工作中遇到一個問題,就是需要將一個Map < String, Object > 這樣的一個類型進(jìn)行保存,后續(xù)并進(jìn)行讀取的功能。當(dāng)時沒有想起來用常見的序列化方式,想起來Map.toString()這樣可以將Map轉(zhuǎn)換到String,但是卻沒有對應(yīng)的反向的方法。
自己就想著實現(xiàn)這樣一個功能,覺得不錯,故將轉(zhuǎn)換代碼貼在如下,但是map的序列化方式還有其他的很多方式,這個只是自己實現(xiàn)的map.toString()的反向轉(zhuǎn)換:
public Object getValue(String param) {
Map map = new HashMap();
String str = "";
String key = "";
Object value = "";
char[] charList = param.toCharArray();
boolean valueBegin = false;
for (int i = 0; i < charList.length; i++) {
char c = charList[i];
if (c == '{') {
if (valueBegin == true) {
value = getValue(param.substring(i, param.length()));
i = param.indexOf('}', i) + 1;
map.put(key, value);
}
} else if (c == '=') {
valueBegin = true;
key = str;
str = "";
} else if (c == ',') {
valueBegin = false;
value = str;
str = "";
map.put(key, value);
} else if (c == '}') {
if (str != "") {
value = str;
}
map.put(key, value);
return map;
} else if (c != ' ') {
str += c;
}
}
return map;
}
測試用例
從簡單到復(fù)雜
public void testFun() {
String str1 = "{idCard=123, phonenum=1234}";
String str2 = "{idCard=123, phonenum=1234, map={hhaha=haha}}";
String str3 = "{idCard=123, phonenum=1234, map={hhaha=haha}, nn={en=ha}}";
String str4 = "{nn={en=ha}, idCard=123, phonenum=1234, map={hhaha=ni, danshi={ke=shi}}}";
Map<String, Object> mapresutl1 = (Map<String, Object>) getValue(str1);
Map<String, Object> mapresutl2 = (Map<String, Object>) getValue(str2);
Map<String, Object> mapresutl3 = (Map<String, Object>) getValue(str3);
Map<String, Object> mapresutl4 = (Map<String, Object>) getValue(str4);
System.out.println(mapresutl1.toString());
System.out.println(mapresutl2.toString());
System.out.println(mapresutl3.toString());
System.out.println(mapresutl4.toString());
}
輸出結(jié)果:
{idCard=123, phonenum=1234} {idCard=123, phonenum=1234, map={hhaha=haha}} {nn={en=ha}, idCard=123, phonenum=1234, map={hhaha=haha}} {nn={en=ha}, idCard=123, phonenum=1234, map={hhaha=ni, danshi={ke=shi}}}
該函數(shù)的功能是能夠處理將Map < String, Object > .toString的字符串再次翻轉(zhuǎn)到對應(yīng)的Map中,其中Object只能是Map類型或者其他基本的類型才行,如果是復(fù)雜的這里不涉及,或者說可以將復(fù)雜的結(jié)構(gòu)用Map的鍵值對來表示,這樣就可以用這種方式。
后來發(fā)現(xiàn),序列化的方式有很多,所以也沒有必要自己去實現(xiàn)一個,map也是可以進(jìn)行序列化的
如下幾個序列化方式
java自帶的,json,hession
還有阿里的fastjson,protobuff等
上面幾個都可以實現(xiàn)map的序列化
特殊格式的String轉(zhuǎn)Map
String a ="{se=2016, format=xml, at=en co=3}";
a = a.substring(1, a.length()-1);
Map docType = new HashMap();
java.util.StringTokenizer items;
for(StringTokenizer entrys = new StringTokenizer(a, ", ");entrys.hasMoreTokens();
docType.put(items.nextToken(), items.hasMoreTokens() ? ((Object) (items.nextToken())) : null)){
items = new StringTokenizer(entrys.nextToken(), "=");
}
System.out.println(docType);
System.out.println("a:"+docType.get("a"));
不需要吧JSONArray或者JSONObject作為處理的轉(zhuǎn)存中介,String直接轉(zhuǎn)Map
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
java調(diào)用百度定位api服務(wù)獲取地理位置示例
java調(diào)用百度定位api服務(wù)獲取地理位置示例,大家參考使用吧2013-12-12
Java使用正則表達(dá)式檢索、替換String中特定字符和正則表達(dá)式的一切
這篇文章主要給大家介紹了關(guān)于Java使用正則表達(dá)式檢索、替換String中特定字符和正則表達(dá)式的一切,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-09-09
springboot項目配置logback-spring.xml實現(xiàn)按日期歸檔日志的方法
本文主要介紹了springboot項目配置logback-spring.xml實現(xiàn)按日期歸檔日志的方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2024-08-08
Spring?AI?+?ollama?本地搭建聊天?AI?功能
這篇文章主要介紹了Spring?AI?+?ollama?本地搭建聊天?AI?,本文通過實例圖文相結(jié)合給大家講解的非常詳細(xì),需要的朋友可以參考下2024-11-11
使用Spring從YAML文件讀取內(nèi)容映射為Map方式
這篇文章主要介紹了使用Spring從YAML文件讀取內(nèi)容映射為Map方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-02-02

