java解析请求的字符串参数Content-Disposition: form-data;和拼接的键值对
项目场景:
获取到http请求的参数,已经被字符串接收了,需求是需要从字符串中解析出来。
一种情况是:Content-Disposition: form-data; name="userCode"
另一种是:key1=value1&key2=value2&key3=value3,&拼接的键值对
解析参数
一、解析Content-Disposition: form-data;
需要解析的字符串
--38e67491-2794-4b83-a1d2-e2667bce6501
Content-Disposition: form-data; name="endDate"
Content-Length: 192024-07-02 00:02:26
--38e67491-2794-4b83-a1d2-e2667bce6501
Content-Disposition: form-data; name="type"
Content-Length: 4xqqk
--38e67491-2794-4b83-a1d2-e2667bce6501--
示例:
public class TestService {public static void main(String[] args) {String requestParamStr = "--38e67491-2794-4b83-a1d2-e2667bce6501\n"+"Content-Disposition: form-data; name=\"endDate\""+"\nContent-Length: 19"+"\n\n"+"2024-07-02 00:02:26"+"\n--38e67491-2794-4b83-a1d2-e2667bce6501\n"+"Content-Disposition: form-data; name=\"type\""+"\nContent-Length: 4"+"\n\n"+"xqqk\n"+"--38e67491-2794-4b83-a1d2-e2667bce6501--";if(requestParamStr.startsWith("--") && requestParamStr.contains("Content-Length")){String[] param = requestParamStr.split("--[a-zA-Z0-9]+\\-");for(String keyvalue:param){if(keyvalue.contains("Content-Disposition")){String key = parseKey(keyvalue);String value = parseValue(keyvalue);System.out.println("key:"+key+",value:"+value);}}}}/*** 正则表达式匹配name参数*/private static String parseKey(String contentDisposition) {String pattern = ".*name=\"([^\"]+)\".*";java.util.regex.Pattern r = java.util.regex.Pattern.compile(pattern);java.util.regex.Matcher m = r.matcher(contentDisposition);if (m.find()) {return m.group(1);}return null;}/*** 正则表达式匹配value参数*/private static String parseValue(String contentDisposition) {String pattern = "\\n\\s*\\n([^\\n]+)";java.util.regex.Pattern r = java.util.regex.Pattern.compile(pattern);java.util.regex.Matcher m = r.matcher(contentDisposition);if (m.find()) {return m.group(1).replaceAll("\r", "").replaceAll("\n", "");}return null;}
}
正则表达式"\\n\\s*\\n([^\\n]+)"的含义是:
\\n\\s*\\n:匹配一个空行,即两个连续的换行符,中间可以有任意空白字符。
([^\\n]+):匹配空行之后的非换行符字符序列,并将其捕获在一个组中。
请注意,这个解决方案假设“空行”是由两个连续的换行符定义的,并且在文本中不会有额外的空白行。如果文本中可能有多个空行,或者空行前后有额外的空白字符,您可能需要调整正则表达式以适应这些情况。
输出:
key:endDate,value:2024-07-02 00:02:26
key:type,value:xqqk
二、解析&拼接的键值对
需要解析的字符串
key1=value1&key2=&key3=value3
示例:
public class TestService {public static void main(String[] args) {String input1 = "key1=value1&key2=&key3=value3";String input2 = "key1=value1&key2=value2&key3=value3";String input3 = "key1=&key2=&key3=";String input4 = "key1=value1&key2=value2&key3"; // 不符合规则,因为键值对中缺少 '='String input5 = "key1=value1&key2=value2&key3=&value4"; // 不符合规则,因为 'value4' 不是一个有效的键值对System.out.println(isValidKeyValuePairs(input1)); // 输出: trueSystem.out.println(isValidKeyValuePairs(input2)); // 输出: trueSystem.out.println(isValidKeyValuePairs(input3)); // 输出: trueSystem.out.println(isValidKeyValuePairs(input4)); // 输出: falseSystem.out.println(isValidKeyValuePairs(input5)); // 输出: falseboolean isCorrect = isValidKeyValuePairs(input1);if(isCorrect){String[] param = input1.split("&");for(String keyvalue:param){String[] pair = keyvalue.split("=",2);if(pair.length==2){System.out.println("key:"+pair[0]+",value:"+pair[1]);}}}}/*** 匹配键值对,键和值可以包含除了 & 以外的任何字符* 值可以为空,键和值之间通过 = 连接,键值对之间通过 & 连接*/private static boolean isValidKeyValuePairs(String input) {// 例如: key=value&key2=value2String pattern = "([^&=&]+=[^&=&]*)(&([^&=&]+=[^&=&]*))*";return input.matches(pattern);}}
这个正则表达式解释如下:
([^&=&]+) 匹配不包含'&', '=', 或者 '&' 的一个或多个字符,这代表键。
= 字面匹配。
[^&=&]* 匹配零个或多个不包含 '&', '=', 或者 '&' 的字符,这代表值。
(&([^&=&]+=[^&=&]*))* 匹配零个或多个以 '&' 开始,后面跟着键值对的子串。
输出:
true
true
true
false
false
key:key1,value:value1
key:key2,value:
key:key3,value:value3
相关文章:
java解析请求的字符串参数Content-Disposition: form-data;和拼接的键值对
项目场景: 获取到http请求的参数,已经被字符串接收了,需求是需要从字符串中解析出来。 一种情况是:Content-Disposition: form-data; name"userCode" 另一种是:key1value1&key2value2&key3value3…...
活动回顾|2024 MongoDB Developer Day圆满收官!
上周六,MongoDB专家与团队在深圳 与90位开发者度过了充实一日 至此,2024 MongoDB Developer Day 北上深三站之行全部圆满结束! 一文回顾本次活动全程与精彩影像! MongoDB Developer Day 专为开发者定制的技术盛宴 全天沉浸动手实…...
MySQL资源组的使用方法
MySQL支持创建和管理资源组,并允许将服务器内运行的线程分配给特定的组,以便线程根据组可用的资源执行。组属性允许控制其资源,以启用或限制组中线程的资源消耗。DBA可以针对不同的工作负载适当地修改这些属性。 目前,CPU时间是一…...
python--实验7 函数(1)
知识点 函数的定义与调用 函数分类:内置函数和自定义函数。函数定义:使用def关键字定义函数,包括函数名、参数列表和函数体。注意: (1)即使该函数不需要接收任何参数,也必须保留一对空的圆括号…...
【力扣】数组中的第K个最大元素
一、题目描述 给定整数数组 nums 和整数 k,请返回数组中第 k 个最大的元素。 请注意,你需要找的是数组排序后的第 k 个最大的元素,而不是第 k 个不同的元素。 你必须设计并实现时间复杂度为 O(n) 的算法解决此问题。 示例 1: 输入: [3,2,1,5,…...
WTM的项目中EFCore如何适配人大金仓数据库
一、WTM是什么 WalkingTec.Mvvm框架(简称WTM)最早开发与2013年,基于Asp.net MVC3 和 最早的Entity Framework, 当初主要是为了解决公司内部开发效率低,代码风格不统一的问题。2017年9月,将代码移植到了.Net Core上&…...
互联网3.0时代的变革者:华贝甄选大模型创新之道
在当今竞争激烈的商业世界中,华贝甄选犹如一颗璀璨的明星,闪耀着独特的光芒。 华贝甄选始终将技术创新与研发视为发展的核心驱动力。拥有先进的研发团队和一流设施,积极探索人工智能、大数据、区块链等前沿技术,为用户提供高性能…...
Tomcat的安全配置
1、生产环境优化 2、部分漏洞修复 转载自风险评估:Tomcat的安全配置,Tomcat安全基线检查加固-CSDN博客...
[笔记] 卷积 - 01 变速箱需要放置多少个加速度传感器?
1.讨论范围 本帖主要对卷积运算的过程和物理意义进行基本的展开,不涉及具体的验算过程。 最终所要达成的目标是,能够自然地判断某种物理现象或者某个测量目标是否与卷积运算有关,以及如何进行测量,搜集数据,调用三方…...
Maya崩溃闪退常见原因及解决方案
Autodesk Maya 是一款功能强大的 3D 计算机图形程序,被电影、游戏和建筑等各个领域的设计师广泛使用。然而,Maya 就像任何其他软件一样可能会发生崩溃问题。在前文中,小编给大家介绍了3ds Max使用V-Ray渲染时的崩溃闪退解决方案: …...
编码与梦想:我的CSDN创作5周年
五年前的今天,我带着对技术的热爱和对知识的渴望,踏上了CSDN的创作之旅。这个平台对于我来说,不仅仅是一个分享和学习的场所,更是我成长和自我实现的见证。 机缘 记得那时,我正为了一个编程难题而苦恼,偶…...
Vue2 基础十Vuex
代码下载 Vuex 概述 组件之间共享数据的方式: 父组件向子组件传值,是以属性的形式绑定值到子组件(v-bind),然后子组件用属性props接收。子组件向父组件传值,子组件用 $emit() 自定义事件,父组…...
【大模型】驾驭未知领域:LLM如何处理域外或无意义的提示
驾驭未知领域:LLM如何处理域外或无意义的提示 引言一、概念解析1.1 域外提示1.2 无意义提示二、LLM处理策略2.1 上下文推断2.2 缺省回答2.3 模糊处理2.4 求助于常识三、实例对比3.1 域外提示实例3.2 无意义提示实例四、挑战与局限五、未来展望六、结语附录:术语解释与参考资料…...
Docker容器 为MySQL创建新用户和授权
当您需要为 MySQL 数据库创建一个新用户并配置其访问权限时,可以按照以下步骤操作。我将创建一个名为 newuser 的新用户,并为其授予在任何主机上访问所有数据库的权限。 创建新用户和授权步骤: 登录到 MySQL 服务器 首先,使用具有…...
openssh9.8p1更新 修复漏洞(CVE-2024-6387)
2024 年 7 月,互联网公开披露了一个 OpenSSH 的远程代码执行漏洞(CVE-2024-6387)。鉴于该漏洞虽然利用较为困难但危害较大,建议所有使用受影响的企业尽快修复该漏洞。 centos7 为例 yum -y install gcc make openssl-devel zlib…...
超市收银系统源码
今天给大家分享一套线上线下打通的收银系统,安卓/win双端线下收银台,可DIY、多模板的三端线上小程序商城,除此之外ERP进销存管理、商品管理、会员营销都很完善。 重点是系统支持OEM贴牌独立部署和全开源源码,非常适合一些正在寻找…...
word 使用手册
word 文档中如何将下行的指定文字退格到上行中 就像是这样的 编号:111 密码:222 编号:123 密码:321 编号:124 密码:331 变成 编号:111密码:222 编号:123密码࿱…...
vue学习day03-指令修饰符、v-bind对于样式控制的增强、v-model应用于其他表单元素
7、指令修饰符 (1)概念: 通过“.”指明一些指令后缀,不同后缀封装了不同的处理操作->简化代码 (2)按键修饰符 keyup.enter->键盘回车监听 (3)v-model修饰符 v-model.tri…...
JRE、JVM、JDK分别是什么。
JDK JDK的英文全称是Java Development Kit。JDK是用于制作程序和Java应用程序的软件开发环境。JDK 是 Java 开发工具包,它是 Java 开发者用来编写、编译、调试和运行 Java 程序的集合。JDK 包括了 Java 编译器(javac)、Java 运行时环境&…...
台灯护眼是真的吗?台灯怎么选对眼睛好?一文带你读懂!
近视问题,这一现代社会的“视力杀手”,正悄然影响着越来越多的人群,尤其是青少年群体。长时间面对电子屏幕和书本,加上不正确的用眼习惯,使得视力下降成为普遍现象。在此背景下,一款优质的护眼台灯显得尤为…...
51c自动驾驶~合集58
我自己的原文哦~ https://blog.51cto.com/whaosoft/13967107 #CCA-Attention 全局池化局部保留,CCA-Attention为LLM长文本建模带来突破性进展 琶洲实验室、华南理工大学联合推出关键上下文感知注意力机制(CCA-Attention),…...
Xshell远程连接Kali(默认 | 私钥)Note版
前言:xshell远程连接,私钥连接和常规默认连接 任务一 开启ssh服务 service ssh status //查看ssh服务状态 service ssh start //开启ssh服务 update-rc.d ssh enable //开启自启动ssh服务 任务二 修改配置文件 vi /etc/ssh/ssh_config //第一…...
【力扣数据库知识手册笔记】索引
索引 索引的优缺点 优点1. 通过创建唯一性索引,可以保证数据库表中每一行数据的唯一性。2. 可以加快数据的检索速度(创建索引的主要原因)。3. 可以加速表和表之间的连接,实现数据的参考完整性。4. 可以在查询过程中,…...
CentOS下的分布式内存计算Spark环境部署
一、Spark 核心架构与应用场景 1.1 分布式计算引擎的核心优势 Spark 是基于内存的分布式计算框架,相比 MapReduce 具有以下核心优势: 内存计算:数据可常驻内存,迭代计算性能提升 10-100 倍(文档段落:3-79…...
React Native在HarmonyOS 5.0阅读类应用开发中的实践
一、技术选型背景 随着HarmonyOS 5.0对Web兼容层的增强,React Native作为跨平台框架可通过重新编译ArkTS组件实现85%以上的代码复用率。阅读类应用具有UI复杂度低、数据流清晰的特点。 二、核心实现方案 1. 环境配置 (1)使用React Native…...
vue3 定时器-定义全局方法 vue+ts
1.创建ts文件 路径:src/utils/timer.ts 完整代码: import { onUnmounted } from vuetype TimerCallback (...args: any[]) > voidexport function useGlobalTimer() {const timers: Map<number, NodeJS.Timeout> new Map()// 创建定时器con…...
DBAPI如何优雅的获取单条数据
API如何优雅的获取单条数据 案例一 对于查询类API,查询的是单条数据,比如根据主键ID查询用户信息,sql如下: select id, name, age from user where id #{id}API默认返回的数据格式是多条的,如下: {&qu…...
用docker来安装部署freeswitch记录
今天刚才测试一个callcenter的项目,所以尝试安装freeswitch 1、使用轩辕镜像 - 中国开发者首选的专业 Docker 镜像加速服务平台 编辑下面/etc/docker/daemon.json文件为 {"registry-mirrors": ["https://docker.xuanyuan.me"] }同时可以进入轩…...
python执行测试用例,allure报乱码且未成功生成报告
allure执行测试用例时显示乱码:‘allure’ �����ڲ����ⲿ���Ҳ���ǿ�&am…...
在web-view 加载的本地及远程HTML中调用uniapp的API及网页和vue页面是如何通讯的?
uni-app 中 Web-view 与 Vue 页面的通讯机制详解 一、Web-view 简介 Web-view 是 uni-app 提供的一个重要组件,用于在原生应用中加载 HTML 页面: 支持加载本地 HTML 文件支持加载远程 HTML 页面实现 Web 与原生的双向通讯可用于嵌入第三方网页或 H5 应…...
