一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務(wù)器之家:專注于服務(wù)器技術(shù)及軟件下載分享
分類導(dǎo)航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術(shù)|正則表達(dá)式|C/C++|IOS|C#|Swift|Android|VB|R語(yǔ)言|JavaScript|易語(yǔ)言|vb.net|

服務(wù)器之家 - 編程語(yǔ)言 - Java教程 - 使用String轉(zhuǎn)換到Map結(jié)構(gòu)

使用String轉(zhuǎn)換到Map結(jié)構(gòu)

2022-03-10 00:35老柿子 Java教程

這篇文章主要介紹了使用String轉(zhuǎn)換到Map結(jié)構(gòu),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

String轉(zhuǎn)換到Map結(jié)構(gòu)

下面的僅限于個(gè)人測(cè)試

最近工作中遇到一個(gè)問(wèn)題,就是需要將一個(gè)Map < String, Object > 這樣的一個(gè)類型進(jìn)行保存,后續(xù)并進(jìn)行讀取的功能。當(dāng)時(shí)沒(méi)有想起來(lái)用常見(jiàn)的序列化方式,想起來(lái)Map.toString()這樣可以將Map轉(zhuǎn)換到String,但是卻沒(méi)有對(duì)應(yīng)的反向的方法。

自己就想著實(shí)現(xiàn)這樣一個(gè)功能,覺(jué)得不錯(cuò),故將轉(zhuǎn)換代碼貼在如下,但是map的序列化方式還有其他的很多方式,這個(gè)只是自己實(shí)現(xiàn)的map.toString()的反向轉(zhuǎn)換:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
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;
    }

測(cè)試用例

從簡(jiǎn)單到復(fù)雜

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
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)到對(duì)應(yīng)的Map中,其中Object只能是Map類型或者其他基本的類型才行,如果是復(fù)雜的這里不涉及,或者說(shuō)可以將復(fù)雜的結(jié)構(gòu)用Map的鍵值對(duì)來(lái)表示,這樣就可以用這種方式。

后來(lái)發(fā)現(xiàn),序列化的方式有很多,所以也沒(méi)有必要自己去實(shí)現(xiàn)一個(gè),map也是可以進(jìn)行序列化的

如下幾個(gè)序列化方式

java自帶的,json,hession

還有阿里的fastjson,protobuff等

上面幾個(gè)都可以實(shí)現(xiàn)map的序列化

特殊格式的String轉(zhuǎn)Map

?
1
String a ="{se=2016, format=xml, at=en co=3}";
?
1
2
3
4
5
6
7
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(), "="); 
   }
?
1
2
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è)參考,也希望大家多多支持服務(wù)器之家。

原文鏈接:https://blog.csdn.net/zhouzhenyong/article/details/54224010

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 石原莉奈被店长侵犯免费 | 亚洲精品午夜视频 | 俄罗斯大逼 | 色女阁| 国产一卡二卡四卡免费 | 国产欧美亚洲精品第一页青草 | h卡通第一页 | 成人丁香婷婷 | darkside动漫在线观看 | 女人扒开下面让男人桶爽视频 | 亚洲高清在线视频 | 99ri国产在线 | 爱豆传媒最新视频国产 | 国产视频久久久久 | 骚虎网站在线观看 | 欧美精品一区二区在线观看播放 | 久草在线草a免费线看 | 女子监狱第二季未删减在线看 | 日本一在线中文字幕天堂 | 亚洲国产精品久久卡一 | 99精品99| 国产成人精品一区二区仙踪林 | 精品香蕉99久久久久网站 | 国产亚洲欧美在线中文bt天堂网 | 色婷婷综合久久久中文字幕 | 四虎2020紧急免费入口 | 日韩大片在线 | 青草视频网 | 亚洲高清视频网站 | 国产大片视频免费观看 | 操操小说 | 日韩毛片免费线上观看 | 国产在线乱子伦一区二区 | 日韩制服丝袜在线观看 | 色倩网站 | 美女用手扒开粉嫩的屁股 | 亚洲精品一区二区三区在线观看 | 男人看片网址 | 秋霞鲁丝影院久久人人综合 | 午夜亚洲福利 | 国产精品四虎在线观看免费 |