属性字符串解析
连续的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的字符串,每个KV之间用","分隔,V中可嵌套KV的连续字符串结构,例如“ key1value1,key2value2,key3[key4value4,key5value5,key6[key7value7]],key8value8 请编写如下函数,给定字符串,输出嵌套结构的H…...
【C++初阶】vector容器
👦个人主页:Weraphael ✍🏻作者简介:目前学习C和算法 ✈️专栏:C航路 🐋 希望大家多多支持,咱一起进步!😁 如果文章对你有帮助的话 欢迎 评论💬 点赞…...
ThreadLocal深度解析
简介 在并发编程中,导致并发bug的问题都会归结于对共享变量的操作不当。多个线程同时读写同一共享变量存在并发问题,我们可以利用写时复制、不变性来突破对原数据的写操作,没有写就没有并发问题,而本篇文章所介绍的技术是突破共享…...
06有监督学习——迁移学习
1.迁移学习分类 (1) 基于实例的迁移学习方法: 假设:源域中的一些数据和目标域会共享很多共同的特征方法:对源域进行instance reweighting,筛选出与目标域数据相似度高的数据,然后进行训练学习 (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、摘要 本文认为人为创建类内差异和保持类内共性可以帮助模型实现更好的缺陷检测能力,从而更好地区分非正常图像。如…...
迈向未来的大门:人脸识别技术的突破与应用
迈向未来的大门:人脸识别技术的突破与应用 人脸识别:人脸识别的工作流程人脸识别的作用人脸识别技术的突破与应用 在深度学习人脸识别之前我们要先知道人脸识别是什么。 人脸识别: 人脸识别是一种基于人脸图像或视频进行身份验证或识别的技术…...
Vue-9.集成(.editorconfig、.eslintrc.js、.prettierrc)
介绍 同时使用 .editorconfig、.prettierrc 和 .eslintrc.js 是很常见的做法,因为它们可以在不同层面上帮助确保代码的格式一致性和质量。这种组合可以在开发过程中提供全面的代码维护和质量保证。然而,这也可能增加一些复杂性,需要谨慎配置…...
Qt 编译使用Bit7z库接口调用7z.dll、7-Zip.dll解压压缩常用Zip、ISO9660、Wim、Esd、7z等格式文件(一)
bit7z一个c静态库,为7-zip共享库提供了一个干净简单的接口 使用CMAKE重新编译github上的bit7z库,用来解压/预览iso9660,WIm,Zip,Rar等常用的压缩文件格式。z-zip库支持大多数压缩文件格式 导读 编译bit7z(C版本)使用mscv 2017编译…...
AndroidUI体系
见:GitHub - eHackyd/Android_UI: Android UI体系的学习笔记...
CBV (基于类的视图)源码解析(1)
面向对象和反射的一些补充说明 class Animal:def __init__(self, name, age, func_str):self.name nameself.age age# self 指的是类实例对象,此处指的是 Dog 的实例对象# 所以如果 Dog 中重写了 sleep 方法,那么 self.sleep() 调用的就是 Dog 中的 s…...
2023-08-17 Untiy进阶 C#知识补充7——C#8主要功能与语法
文章目录 一、Using 声明二、静态本地函数三、Null 合并赋值四、解构函数 Deconstruct五、模式匹配增强功能 注意:在此仅提及 Unity 开发中会用到的一些功能和特性,对于不适合在 Unity 中使用的内容会忽略。 C# 8 对应 Unity 版本: Un…...
登陆接口的的Filter过滤
目录 一、概述 二、基本操作 三、登陆检查接口 一、概述 什么是Filter? Filter表示过滤器,是 JavaWeb三大组件(Servlet、Filter、Listener)之一。 过滤器可以把对资源的请求拦截下来,从而实现一些特殊的功能 使用了过滤器之后࿰…...
【Python原创设计】基于Python Flask的全国气象数据采集及可视化系统-附下载方式以及项目参考论文,原创项目其他均为抄袭
基于Python Flask的全国气象数据采集及可视化系统 一、项目简介二、项目技术三、项目功能四、运行截图五、分类说明六、实现代码七、数据库结构八、源码下载 一、项目简介 本项目是一个基于Web技术的实时气象数据可视化系统。通过爬取中国天气网的各个城市气象数据,…...
【力扣】42. 接雨水 <模拟、双指针、单调栈>
【力扣】42. 接雨水 给定 n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。 目录 【力扣】42. 接雨水题解暴力双指针单调栈 示例 1: 输入:height [0,1,0,2,1,0,1,3,2,1,2,1] 输出&…...
【leetcode 力扣刷题】链表基础知识 基础操作
链表基础知识 基础操作 链表基础操作链表基础知识插入节点删除节点查找节点 707. 设计链表实现:单向链表:实现:双向链表 链表基础操作 链表基础知识 在数据结构的学习过程中,我们知道线性表【一种数据组织、在内存中存储的形式】…...
关于openfeign调用时content-type的问题
问题1描述: 今天在A服务使用openfeign调用B服务的时候,发现经常会偶发性报错。错误如下: 情况为偶发,很让人头疼。 两个接口如下: A服务接口: delayReasonApi.test(student);就是使用openfeign调用B服务的…...
OpenCV 玩转图像和视频
为什么学OpenCV? • OpenCV ⽀持对图像缩放、旋转、绘制⽂字图形等基础操作 • OpenCV 库包含了很多计算机视觉领域常⻅算法:⽬标检测、⽬标跟踪等 OpenCV 简介 • OpenCV (Open Source Computer Vision) 是计算机视觉和机器学习软件库 • Intel 1999…...
技术分享 | 如何编写同时兼容 Vue2 和 Vue3 的代码?
LigaAI 的评论编辑器、附件展示以及富文本编辑器都支持在 Vue2(Web)与 Vue3(VSCode、lDEA)中使用。这样不仅可以在不同 Vue 版本的工程中间共享代码,还能为后续升级 Vue3 减少一定阻碍。 那么,同时兼容 Vue…...
基于ArcGis提取道路中心线
基于ArcGis提取道路中心线 文章目录 基于ArcGis提取道路中心线前言一、生成缓冲区二、导出栅格数据三、导入栅格数据四、新建中心线要素五、生成中心线总结 前言 最近遇到一个问题,根据道路SHP数据生成模型的时候由于下载的道路数据杂项数据很多,所以导…...
基于FPGA的PID算法学习———实现PID比例控制算法
基于FPGA的PID算法学习 前言一、PID算法分析二、PID仿真分析1. PID代码2.PI代码3.P代码4.顶层5.测试文件6.仿真波形 总结 前言 学习内容:参考网站: PID算法控制 PID即:Proportional(比例)、Integral(积分&…...
三维GIS开发cesium智慧地铁教程(5)Cesium相机控制
一、环境搭建 <script src"../cesium1.99/Build/Cesium/Cesium.js"></script> <link rel"stylesheet" href"../cesium1.99/Build/Cesium/Widgets/widgets.css"> 关键配置点: 路径验证:确保相对路径.…...
基于ASP.NET+ SQL Server实现(Web)医院信息管理系统
医院信息管理系统 1. 课程设计内容 在 visual studio 2017 平台上,开发一个“医院信息管理系统”Web 程序。 2. 课程设计目的 综合运用 c#.net 知识,在 vs 2017 平台上,进行 ASP.NET 应用程序和简易网站的开发;初步熟悉开发一…...
SCAU期末笔记 - 数据分析与数据挖掘题库解析
这门怎么题库答案不全啊日 来简单学一下子来 一、选择题(可多选) 将原始数据进行集成、变换、维度规约、数值规约是在以下哪个步骤的任务?(C) A. 频繁模式挖掘 B.分类和预测 C.数据预处理 D.数据流挖掘 A. 频繁模式挖掘:专注于发现数据中…...
Go 语言接口详解
Go 语言接口详解 核心概念 接口定义 在 Go 语言中,接口是一种抽象类型,它定义了一组方法的集合: // 定义接口 type Shape interface {Area() float64Perimeter() float64 } 接口实现 Go 接口的实现是隐式的: // 矩形结构体…...
Opencv中的addweighted函数
一.addweighted函数作用 addweighted()是OpenCV库中用于图像处理的函数,主要功能是将两个输入图像(尺寸和类型相同)按照指定的权重进行加权叠加(图像融合),并添加一个标量值&#x…...
智能在线客服平台:数字化时代企业连接用户的 AI 中枢
随着互联网技术的飞速发展,消费者期望能够随时随地与企业进行交流。在线客服平台作为连接企业与客户的重要桥梁,不仅优化了客户体验,还提升了企业的服务效率和市场竞争力。本文将探讨在线客服平台的重要性、技术进展、实际应用,并…...
06 Deep learning神经网络编程基础 激活函数 --吴恩达
深度学习激活函数详解 一、核心作用 引入非线性:使神经网络可学习复杂模式控制输出范围:如Sigmoid将输出限制在(0,1)梯度传递:影响反向传播的稳定性二、常见类型及数学表达 Sigmoid σ ( x ) = 1 1 +...
Fabric V2.5 通用溯源系统——增加图片上传与下载功能
fabric-trace项目在发布一年后,部署量已突破1000次,为支持更多场景,现新增支持图片信息上链,本文对图片上传、下载功能代码进行梳理,包含智能合约、后端、前端部分。 一、智能合约修改 为了增加图片信息上链溯源,需要对底层数据结构进行修改,在此对智能合约中的农产品数…...
VM虚拟机网络配置(ubuntu24桥接模式):配置静态IP
编辑-虚拟网络编辑器-更改设置 选择桥接模式,然后找到相应的网卡(可以查看自己本机的网络连接) windows连接的网络点击查看属性 编辑虚拟机设置更改网络配置,选择刚才配置的桥接模式 静态ip设置: 我用的ubuntu24桌…...
