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
相关产品推荐
相关产品推荐

