使用String轉(zhuǎn)換到Map結(jié)構(gòu)
String轉(zhuǎn)換到Map結(jié)構(gòu)
下面的僅限于個(gè)人測試
最近工作中遇到一個(gè)問題,就是需要將一個(gè)Map < String, Object > 這樣的一個(gè)類型進(jìn)行保存,后續(xù)并進(jìn)行讀取的功能。當(dāng)時(shí)沒有想起來用常見的序列化方式,想起來Map.toString()這樣可以將Map轉(zhuǎn)換到String,但是卻沒有對應(yīng)的反向的方法。
自己就想著實(shí)現(xiàn)這樣一個(gè)功能,覺得不錯(cuò),故將轉(zhuǎn)換代碼貼在如下,但是map的序列化方式還有其他的很多方式,這個(gè)只是自己實(shí)現(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),序列化的方式有很多,所以也沒有必要自己去實(shí)現(xiàn)一個(gè),map也是可以進(jìn)行序列化的
如下幾個(gè)序列化方式
java自帶的,json,hession
還有阿里的fastjson,protobuff等
上面幾個(gè)都可以實(shí)現(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
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Mybatis-plus中IService接口的基本使用步驟
Mybatis-plus是一個(gè)Mybatis的增強(qiáng)工具,它提供了很多便捷的方法來簡化開發(fā),IService是Mybatis-plus提供的通用service接口,封裝了常用的數(shù)據(jù)庫操作方法,包括增刪改查等,下面這篇文章主要給大家介紹了關(guān)于Mybatis-plus中IService接口的基本使用步驟,需要的朋友可以參考下2023-06-06Java項(xiàng)目開發(fā)中實(shí)現(xiàn)分頁的三種方式總結(jié)
這篇文章主要給大家介紹了關(guān)于Java項(xiàng)目開發(fā)中實(shí)現(xiàn)分頁的三種方式,通過這一篇文章可以很快的學(xué)會java分頁功能,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考下2022-02-02Java實(shí)現(xiàn)自定義LinkedList類的示例代碼
LinkedList類跟ArrayList類不同,它通過指針以及結(jié)點(diǎn)的操作對鏈表進(jìn)行增刪改查。本文就來和大家分享下Java如何為實(shí)現(xiàn)自定義LinkedList類,需要的可以參考一下2022-08-08java核心編程之文件過濾類FileFilter和FilenameFilter
這篇文章主要為大家詳細(xì)介紹了java文件過濾類FileFilter和FilenameFilter,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-08-08Spring Aop 如何獲取參數(shù)名參數(shù)值
這篇文章主要介紹了Spring Aop 如何獲取參數(shù)名參數(shù)值的操作,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-07-07