当前位置: 首页 > news >正文

属性字符串解析

连续的K=V的字符串,每个K=V之间用","分隔,V中可嵌套K=V的连续字符串结构,例如“
key1=value1,key2=value2,key3=[key4=value4,key5=value5,key6=[key7=value7]],key8=value8
请编写如下函数,给定字符串,输出嵌套结构的HashMap
HashMap<String, Object> parse(String input) {...
}

暂时没想出一个方法不用递归就能解析完的

解法1     只处理当前字符串第一个嵌套体位置的前面普通键值对,将第一个嵌套体内容递归处理,将第一个嵌套体后面剩余的字符串递归处理

 HashMap<String,Object> parse(String input){HashMap<String,Object> hashMap=new HashMap<>();char[] chars=input.toCharArray();int keyStart=0;int start=-1;//[位置int end=-1;//]位置int stack=0;//栈计数器for (int i=0;i<chars.length;i++){if(chars[i]=='['){stack++;if(stack==1){start=i+1;for(int j=i;j>0;j--){if(chars[j]==','){keyStart=j+1;break;}}}}else if(chars[i]==']'){if(stack==1){end=i;break;}stack--;}}String[] keyValueArray=new String[0];if(start>-1){//这里处理前半截if(keyStart-1>=0){keyValueArray=input.substring(0,keyStart-1).split(",");}//发现有[]  ,  递归处理String temp=input.substring(start,end);hashMap.put(input.substring(keyStart,start-2),parse(temp));//发现后面还有东西if(end<input.length()-1){hashMap.putAll( parse(input.substring(end+1)));}}else{//没有发现[]keyValueArray=input.split(",");}for(String kv:keyValueArray){if("".equals(kv.trim()))continue;String[] array=kv.split("=");hashMap.put(array[0],array[1]);}return hashMap;}

解法2   当前字符串中所有普通键值对进行处理,将所有遇到的嵌套体内容递归处理

    HashMap<String, Object> parse(String input) {HashMap<String, Object> hashMap = new HashMap<>();char[] chars = input.toCharArray();int kvStart = 0;//记录当前键值对的开始字段int keyStart = 0;int start = -1;//[位置int end = -1;//]位置int stack = 0;//栈计数器for (int i = 0; i < chars.length; i++) {if (chars[i] == ',' && stack == 0) {//stack=0,表示不在嵌套结构内,作为普通的键值对解析String[] array = input.substring(kvStart, i).split("=");hashMap.put(array[0], array[1]);kvStart = i + 1;}else if(i==chars.length-1&&chars[i] != ']'){//尾部处理:如果是普通的字符串,尾部肯定不是],作为普通键值对String[] array = input.substring(kvStart, i+1).split("=");hashMap.put(array[0], array[1]);}else if (chars[i] == '[') {stack++;if (stack == 1) {//第一次嵌套开始start = i + 1;//嵌套内容起始位置for (int j = i; j > 0; j--) {if (chars[j] == ',') {keyStart = j + 1;//当前嵌套体的key起始字符位置break;}}}} else if (chars[i] == ']') { //第一次嵌套结束if (stack == 1) {end = i;hashMap.put(input.substring(keyStart, start - 2), parse(input.substring(start, end)));i++;//跳过逗号kvStart = i + 1;//下个键值对的起始位置}stack--;}}return hashMap;}

相关文章:

属性字符串解析

连续的KV的字符串&#xff0c;每个KV之间用","分隔&#xff0c;V中可嵌套KV的连续字符串结构&#xff0c;例如“ key1value1,key2value2,key3[key4value4,key5value5,key6[key7value7]],key8value8 请编写如下函数&#xff0c;给定字符串&#xff0c;输出嵌套结构的H…...

【C++初阶】vector容器

&#x1f466;个人主页&#xff1a;Weraphael ✍&#x1f3fb;作者简介&#xff1a;目前学习C和算法 ✈️专栏&#xff1a;C航路 &#x1f40b; 希望大家多多支持&#xff0c;咱一起进步&#xff01;&#x1f601; 如果文章对你有帮助的话 欢迎 评论&#x1f4ac; 点赞&#x1…...

ThreadLocal深度解析

简介 在并发编程中&#xff0c;导致并发bug的问题都会归结于对共享变量的操作不当。多个线程同时读写同一共享变量存在并发问题&#xff0c;我们可以利用写时复制、不变性来突破对原数据的写操作&#xff0c;没有写就没有并发问题&#xff0c;而本篇文章所介绍的技术是突破共享…...

06有监督学习——迁移学习

1.迁移学习分类 &#xff08;1&#xff09; 基于实例的迁移学习方法&#xff1a; 假设:源域中的一些数据和目标域会共享很多共同的特征方法:对源域进行instance reweighting&#xff0c;筛选出与目标域数据相似度高的数据&#xff0c;然后进行训练学习 &#xff08;2&#x…...

快速连接服务器脚本 可从多个服务中选择并连接

使用 python 做一个可选择服务器登录连接的脚本 前置条件 需要有python 环境python --version 显示版本号即可检查 python 是否有 paramiko 包没有的话 python install paramiko创建一个python 文件,内容如下 # -*- coding: utf-8 -*-""" Authors: huxiaohua…...

MemSeg:一种差异和共性来检测图像表面缺陷的半监督方法

目录 1、摘要 2、Method 2.1 模拟异常样本 2.2 Memory Module 2.3 空间注意模块 2.4 多尺度特征融合模块 2.5 损失函数设置 2.6 Decoder模块 1、摘要 本文认为人为创建类内差异和保持类内共性可以帮助模型实现更好的缺陷检测能力&#xff0c;从而更好地区分非正常图像。如…...

迈向未来的大门:人脸识别技术的突破与应用

迈向未来的大门&#xff1a;人脸识别技术的突破与应用 人脸识别&#xff1a;人脸识别的工作流程人脸识别的作用人脸识别技术的突破与应用 在深度学习人脸识别之前我们要先知道人脸识别是什么。 人脸识别&#xff1a; 人脸识别是一种基于人脸图像或视频进行身份验证或识别的技术…...

Vue-9.集成(.editorconfig、.eslintrc.js、.prettierrc)

介绍 同时使用 .editorconfig、.prettierrc 和 .eslintrc.js 是很常见的做法&#xff0c;因为它们可以在不同层面上帮助确保代码的格式一致性和质量。这种组合可以在开发过程中提供全面的代码维护和质量保证。然而&#xff0c;这也可能增加一些复杂性&#xff0c;需要谨慎配置…...

Qt 编译使用Bit7z库接口调用7z.dll、7-Zip.dll解压压缩常用Zip、ISO9660、Wim、Esd、7z等格式文件(一)

bit7z一个c静态库&#xff0c;为7-zip共享库提供了一个干净简单的接口 使用CMAKE重新编译github上的bit7z库&#xff0c;用来解压/预览iso9660&#xff0c;WIm&#xff0c;Zip,Rar等常用的压缩文件格式。z-zip库支持大多数压缩文件格式 导读 编译bit7z(C版本)使用mscv 2017编译…...

AndroidUI体系

见&#xff1a;GitHub - eHackyd/Android_UI: Android UI体系的学习笔记...

CBV (基于类的视图)源码解析(1)

面向对象和反射的一些补充说明 class Animal:def __init__(self, name, age, func_str):self.name nameself.age age# self 指的是类实例对象&#xff0c;此处指的是 Dog 的实例对象# 所以如果 Dog 中重写了 sleep 方法&#xff0c;那么 self.sleep() 调用的就是 Dog 中的 s…...

2023-08-17 Untiy进阶 C#知识补充7——C#8主要功能与语法

文章目录 一、Using 声明二、静态本地函数三、Null 合并赋值四、解构函数 Deconstruct五、模式匹配增强功能 ​ 注意&#xff1a;在此仅提及 Unity 开发中会用到的一些功能和特性&#xff0c;对于不适合在 Unity 中使用的内容会忽略。 ​ C# 8 对应 Unity 版本&#xff1a; Un…...

登陆接口的的Filter过滤

目录 一、概述 二、基本操作 三、登陆检查接口 一、概述 什么是Filter&#xff1f; Filter表示过滤器&#xff0c;是 JavaWeb三大组件(Servlet、Filter、Listener)之一。 过滤器可以把对资源的请求拦截下来&#xff0c;从而实现一些特殊的功能 使用了过滤器之后&#xff0…...

【Python原创设计】基于Python Flask的全国气象数据采集及可视化系统-附下载方式以及项目参考论文,原创项目其他均为抄袭

基于Python Flask的全国气象数据采集及可视化系统 一、项目简介二、项目技术三、项目功能四、运行截图五、分类说明六、实现代码七、数据库结构八、源码下载 一、项目简介 本项目是一个基于Web技术的实时气象数据可视化系统。通过爬取中国天气网的各个城市气象数据&#xff0c…...

【力扣】42. 接雨水 <模拟、双指针、单调栈>

【力扣】42. 接雨水 给定 n 个非负整数表示每个宽度为 1 的柱子的高度图&#xff0c;计算按此排列的柱子&#xff0c;下雨之后能接多少雨水。 目录 【力扣】42. 接雨水题解暴力双指针单调栈 示例 1&#xff1a; 输入&#xff1a;height [0,1,0,2,1,0,1,3,2,1,2,1] 输出&…...

【leetcode 力扣刷题】链表基础知识 基础操作

链表基础知识 基础操作 链表基础操作链表基础知识插入节点删除节点查找节点 707. 设计链表实现&#xff1a;单向链表&#xff1a;实现&#xff1a;双向链表 链表基础操作 链表基础知识 在数据结构的学习过程中&#xff0c;我们知道线性表【一种数据组织、在内存中存储的形式】…...

关于openfeign调用时content-type的问题

问题1描述&#xff1a; 今天在A服务使用openfeign调用B服务的时候&#xff0c;发现经常会偶发性报错。错误如下&#xff1a; 情况为偶发&#xff0c;很让人头疼。 两个接口如下&#xff1a; A服务接口&#xff1a; delayReasonApi.test(student);就是使用openfeign调用B服务的…...

OpenCV 玩转图像和视频

为什么学OpenCV&#xff1f; • OpenCV ⽀持对图像缩放、旋转、绘制⽂字图形等基础操作 • OpenCV 库包含了很多计算机视觉领域常⻅算法&#xff1a;⽬标检测、⽬标跟踪等 OpenCV 简介 • OpenCV (Open Source Computer Vision) 是计算机视觉和机器学习软件库 • Intel 1999…...

技术分享 | 如何编写同时兼容 Vue2 和 Vue3 的代码?

LigaAI 的评论编辑器、附件展示以及富文本编辑器都支持在 Vue2&#xff08;Web&#xff09;与 Vue3&#xff08;VSCode、lDEA&#xff09;中使用。这样不仅可以在不同 Vue 版本的工程中间共享代码&#xff0c;还能为后续升级 Vue3 减少一定阻碍。 那么&#xff0c;同时兼容 Vue…...

基于ArcGis提取道路中心线

基于ArcGis提取道路中心线 文章目录 基于ArcGis提取道路中心线前言一、生成缓冲区二、导出栅格数据三、导入栅格数据四、新建中心线要素五、生成中心线总结 前言 最近遇到一个问题&#xff0c;根据道路SHP数据生成模型的时候由于下载的道路数据杂项数据很多&#xff0c;所以导…...

xcode14.3更新一系列问题

1. Missing file libarclite_iphoneos.a (Xcode 14.3) 解决方法 Xcode升级到14.3后编译失败&#xff0c;完整错误日志&#xff1a; File not found: /Applications/Xcode-beta.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/arc/libarclite_iphoneo…...

1U和2U的服务器怎么选择

企业建设网站的过程中&#xff0c;离不开租用服务器的环节&#xff0c;服务器在多种场景里面都可以发挥作用&#xff0c;服务器租用渠道有哪些&#xff1f;1U、2U选哪种服务器比较好&#xff1f;大家跟着壹基比小鑫一起来了解具体内容吧&#xff01; 1U、2U选哪种服务器比较好&…...

【SA8295P 源码分析】05 - SA8295P QNX Host 上电开机过程 进一步梳理(结合代码)

【SA8295P 源码分析】05 - SA8295P QNX Host 上电开机过程 进一步梳理(结合代码) 一、APPS PBL(Application Primary Boot Loader):固化在CPU ROM中1.1 APPS PBL 加载 XBL Loader1.2 XBL Loader加载验证并运行SMSS进行自检,自检完成后触发Warm Reset1.3 WarmRest后,APPS…...

【数据结构与算法】迪杰斯特拉算法

迪杰斯特拉算法 介绍 迪杰斯特拉&#xff08;Dijkstra&#xff09;算法是典型最短路径算法&#xff0c;用于计算一个节点到其他节点的最短路径。它的主要特点是以中心向外层层扩展&#xff08;广度优先搜索思想&#xff09;&#xff0c;直到扩展到终点为止。 算法过程 设置…...

python爬虫-网页数据提取

import requests #headers 网页右键->Network->最下面的User-Agent复制。 headers {"user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/116.0.0.0 Safari/537.36"} #你想要的网址 url &q…...

ZigBee的Many-to-One和Source Routing

1. Many-to-One Routing Many-to-One Routing&#xff0c;是一种简单的路由机制&#xff0c;使得整个网络中的路由设备拥有回到中心节点的路由。 在这种机制下&#xff0c;中心节点周期性发送Many-to-One route discovery广播&#xff08;协议栈默认设置为60s&#xff0c;可以…...

七夕节 Chinese Valentine‘s Day 的由来

农历七月初七是七夕节。Qixi Festival falls on the seventh day of the seventh lunar month. 以前有一个牛郎&#xff0c;和他的哥哥和嫂子住在一起。他放的一头牛曾经是天庭的一个神仙&#xff0c;但他违反天庭的戒律&#xff0c;变成牛放到了人间。As the story goes,once …...

掌握JDK21全新结构化并发编程,轻松提升开发效率!

1 概要 通过引入结构化并发编程的API&#xff0c;简化并发编程。结构化并发将在不同线程中运行的相关任务组视为单个工作单元&#xff0c;从而简化错误处理和取消操作&#xff0c;提高可靠性&#xff0c;并增强可观察性。这是一个预览版的API。 2 历史 结构化并发是由JEP 42…...

【SA8295P 源码分析】00 - 系列文章链接汇总 - 持续更新中

【SA8295P 源码分析】00 - 系列文章链接汇总 - 持续更新中 一、分区、下载、GPIO等杂项相关二、开机启动流程代码分析二、OpenWFD 显示屏模块三、Touch Panel 触摸屏模块四、QUPv3 及 QNX Host透传配置五、Camera 摄像头模块&#xff08;当前正在更新中...&#xff09;六、网络…...

TCP拥塞控制详解 | 6. 主动队列管理

网络传输问题本质上是对网络资源的共享和复用问题&#xff0c;因此拥塞控制是网络工程领域的核心问题之一&#xff0c;并且随着互联网和数据中心流量的爆炸式增长&#xff0c;相关算法和机制出现了很多创新&#xff0c;本系列是免费电子书《TCP Congestion Control: A Systems …...

网套加工机器设备/seo职位

1034: 交换最值的位置 [水题]时间限制: 1 Sec 内存限制: 128 MB提交: 379 解决: 132 统计题目描述给定一个序列&#xff0c;现在让你交换序列最大值和最小值的位置&#xff0c;并输出交换后的序列。输入第一行输入一个整数T&#xff0c;代表有T组测试数据。每组数据第一行输入一…...

政务网站建设工作的通知/seo关键词排名优化销售

两者操作流程图 请先看图再结合例子记忆 1. 普通的 input 元素 在页面上&#xff0c;有这样一个 input 元素。 <input id"myInput" type"text" value"Jethro" />;我们分别用 input.value 和 getAttribute() 两种方式获取它 value 属性的…...

大良o2o网站建设/百度推广客服投诉电话

QC 使用中问题点汇总&#xff0c;包括以下方面&#xff1a;  1、不兼容IE7&#xff0c;IE8的问题(服务器端设置)  2、无法在Win 7下正常下载页面(客户端设置)  3、在QC中填写中文内容后无法正常提交到数据库(客户端设置)  4、在QC中填写中文内容出现乱码的现象(待修改)…...

阿雷网站建设公司/百度数据平台

在前后端完全分离的情况下&#xff0c;Vue项目中实现token验证大致思路如下&#xff1a; 1、第一次登录的时候&#xff0c;前端调后端的登陆接口&#xff0c;发送用户名和密码 2、后端收到请求&#xff0c;验证用户名和密码&#xff0c;验证成功&#xff0c;就给前端返回一个…...

wordpress 内容 管理/推广方案框架

一&#xff1a;背景1. 讲故事前段时间写了几篇 C# 漫文&#xff0c;评论留言中有很多朋友多次提到 Span&#xff0c;周末抽空看了下&#xff0c;确实是一个非常 的新结构&#xff0c;让我想到了当年的WCF&#xff0c;它统一了.NET下各种零散的分布式技术&#xff0c;包括&#…...

为什么用Vue做网站的很少/优化营商环境应当坚持什么原则

k8s中使用service做四层负载均衡 在kubernetes中&#xff0c;Pod是有生命周期的&#xff0c;如果pod重启IP很有可能就会发生变化。如果我们的服务都是将pod的IP写死&#xff0c;pod的挂掉或者重启&#xff0c;和刚才重启的pod相关联的其他服务就会找不到它所关联的pod&#xff…...