可用indexOf()定位分隔符、substring()截取key和value:先用indexOf("=")找等号位置,再用indexOf("&"或";",eqIndex+1)找下一分隔符,key=substring(0,eqIndex),value=substring(eqIndex+1,nextSepIndex),循环处理多组并注意空值与边界防护。

可以用 indexOf() 定位分隔符位置,再用 substring() 截取对应区间的字符串,从而提取 key 和 value。
定位等号或分隔符位置
复合变量文本通常形如 "username=john&age=25&city=beijing" 或 "host=localhost;port=3306;db=test"。先用 indexOf("=") 找到第一个等号,再用 indexOf(";", start) 或 indexOf("&", start) 找下一个分隔符,确定 value 的结束位置。
- 对
"key=value"片段,indexOf("=")返回等号索引 - 若后面还有
&或;,用indexOf("&", eqIndex + 1)找下一个分隔符位置 - 若已是末尾,value 截取到字符串末尾即可
用 substring 提取 key 和 value
拿到起始和结束索引后,用 substring(beginIndex, endIndex) 精确截取:
- key:从开头到等号前一位 ——
substring(0, eqIndex) - value:从等号后一位到下一个分隔符(或末尾)——
substring(eqIndex + 1, nextSepIndex) - 注意:如果
nextSepIndex == -1,说明是最后一组,用length()代替
处理多组键值对(循环拆分)
整个字符串含多个键值对时,不能只截一次。建议用 while 循环,每次处理一个 "key=value",然后更新起始搜索位置:
- 初始化
start = 0 - 每次找
=和下一个分隔符,截出当前 kv - 把
start更新为nextSepIndex + 1(跳过分隔符),继续下一轮 - 当
indexOf("=", start) == -1时退出
注意边界与空值处理
实际文本可能有空格、缺失 value 或重复分隔符,需主动防御:
- 用
trim()清除 key/value 前后空格 - 检查
eqIndex是否有效(≠ -1),避免StringIndexOutOfBoundsException - 若等号后直接跟分隔符(如
"key=&other=1"),value 为空字符串,应保留而非跳过 - 避免硬编码分隔符,可封装成参数(如
parse(text, "=", "&"))提升复用性










