You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android中split("\\$$")无法正确分割序列化对象串求助

Android中字符串分割异常问题的解决方案

嘿,我来帮你搞定这个头疼的分割问题!你遇到的数组长度为1的情况,核心原因是分割用的正则表达式写错了,咱们一步步来拆解:

问题出在哪?

你用的listTemp.split("\\$$")里,正则中的$是个特殊元字符,代表“行尾位置”。这个正则的实际意思是:匹配一个转义后的$符号,并且这个符号得在字符串的末尾。自然,它根本找不到你字符串中间用来分隔对象的$$,所以整个字符串被当成了一个元素,数组长度就是1。

正确的写法是什么?

要匹配字面量的$$,得给每个$都做转义:

  • 在正则里,$需要写成\$才能表示字面量;
  • 而在Java字符串中,\本身要转义成\\,所以最终的分割字符串应该是"\\$\\$"。

给你写个完整的示例代码:

String rawData = "zfzzfzfTitre$Interpretessfcqfqfz$Genresqqqcqvqv$URLqdqddqdqdqd$0$$zfzzfzfTitresss$Interpretessfcqfqfzscsc$Genresqqqcqvqvcs$URLqdqddqdqdqd$1$$zfzzfzfTitresss$Interpretessfcqfqfzscsc$Genresqqqcqvqvcs$URLqdqddqdqdqd$2$$zfzzfzfTitresss$Interpretessfcqfqfzscsc$Genresqqqcqvqvcs$URLqdqddqdqdqd$3$$";
// 用正确的正则分割
String[] objectArray = rawData.split("\\$\\$");

// 如果你不想保留末尾的空字符串(因为原数据最后是$$),可以过滤一下
List<String> validObjects = new ArrayList<>();
for (String objStr : objectArray) {
    if (!objStr.trim().isEmpty()) {
        validObjects.add(objStr);
    }
}
// 现在validObjects里就是4个完整的对象字符串啦

为啥Java 8/Linux下能正常运行?

这大概率是测试场景的差异或者正则引擎的容错性不同——严格来说,"\\$$"这个正则在标准Java里也不应该正确分割中间的$$。建议你再核对下之前的测试输入,说不定当时的字符串末尾没有多余的$$,刚好误打误撞了?

内容的提问来源于stack exchange,提问作者mauris

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 07:16:26