使用String转换到Map结构

 更新时间:2021年11月03日 10:50:47   作者:老柿子  
这篇文章主要介绍了使用String转换到Map结构,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

String转换到Map结构

下面的仅限于个人测试

最近工作中遇到一个问题,就是需要将一个Map < String, Object > 这样的一个类型进行保存,后续并进行读取的功能。当时没有想起来用常见的序列化方式,想起来Map.toString()这样可以将Map转换到String,但是却没有对应的反向的方法。

自己就想着实现这样一个功能,觉得不错,故将转换代码贴在如下,但是map的序列化方式还有其他的很多方式,这个只是自己实现的map.toString()的反向转换:

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;
    }

测试用例

从简单到复杂

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());
    }

输出结果:

{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}}}

该函数的功能是能够处理将Map < String, Object > .toString的字符串再次翻转到对应的Map中,其中Object只能是Map类型或者其他基本的类型才行,如果是复杂的这里不涉及,或者说可以将复杂的结构用Map的键值对来表示,这样就可以用这种方式。

后来发现,序列化的方式有很多,所以也没有必要自己去实现一个,map也是可以进行序列化的

如下几个序列化方式

java自带的,json,hession

还有阿里的fastjson,protobuff等

上面几个都可以实现map的序列化

特殊格式的String转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作为处理的转存中介,String直接转Map

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • SpringMVC适配器模式作用范围介绍

    SpringMVC适配器模式作用范围介绍

    适配器这个词我们应该很熟悉,天天都在使用,手机充电时,电源线头头就叫电源适配器,干什么用的呢?把220V电压转换成手机充电时使用的电压,那么适配器是不是很好理解了,下面看一下
    2023-04-04
  • Mybatis-plus中IService接口的基本使用步骤

    Mybatis-plus中IService接口的基本使用步骤

    Mybatis-plus是一个Mybatis的增强工具,它提供了很多便捷的方法来简化开发,IService是Mybatis-plus提供的通用service接口,封装了常用的数据库操作方法,包括增删改查等,下面这篇文章主要给大家介绍了关于Mybatis-plus中IService接口的基本使用步骤,需要的朋友可以参考下
    2023-06-06
  • Java项目开发中实现分页的三种方式总结

    Java项目开发中实现分页的三种方式总结

    这篇文章主要给大家介绍了关于Java项目开发中实现分页的三种方式,通过这一篇文章可以很快的学会java分页功能,文中通过示例代码介绍的非常详细,需要的朋友可以参考下
    2022-02-02
  • Java实现自定义LinkedList类的示例代码

    Java实现自定义LinkedList类的示例代码

    LinkedList类跟ArrayList类不同,它通过指针以及结点的操作对链表进行增删改查。本文就来和大家分享下Java如何为实现自定义LinkedList类,需要的可以参考一下
    2022-08-08
  • Java实现简单QQ聊天工具

    Java实现简单QQ聊天工具

    这篇文章主要为大家详细介绍了Java实现简单QQ聊天工具,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-09-09
  • java核心编程之文件过滤类FileFilter和FilenameFilter

    java核心编程之文件过滤类FileFilter和FilenameFilter

    这篇文章主要为大家详细介绍了java文件过滤类FileFilter和FilenameFilter,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-08-08
  • 详解Java快速上手用户后台管理系统

    详解Java快速上手用户后台管理系统

    只有在实战中练习才能真正获得能力的提升,本篇文章手把手带你用Java快速上手实现一个用户后台管理系统,大家可以在过程中查缺补漏,提升水平
    2022-01-01
  • Java基于redis实现分布式锁

    Java基于redis实现分布式锁

    系统的不断扩大,分布式锁是最基本的保障。今天我们介绍通过redis实现分布式锁,感兴趣的朋友可以参考下
    2021-05-05
  • Spring Aop 如何获取参数名参数值

    Spring Aop 如何获取参数名参数值

    这篇文章主要介绍了Spring Aop 如何获取参数名参数值的操作,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-07-07
  • SpringBoot实现分页功能

    SpringBoot实现分页功能

    这篇文章主要为大家详细介绍了SpringBoot实现分页功能,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-08-08

最新评论