如何使用Java String.split(regexp)提取引号内字符串且不含引号?
用Java的String.split直接提取引号内的字符串
当然可以直接用split方法实现你的需求,而且还能保留字符串内部的空格——这比你说的先replaceAll的方法更靠谱,毕竟replaceAll会把字符串里的空格也删掉,破坏原内容。
咱们针对你给出的字符串格式来设计正则:
实现思路
核心是把**引号、引号外的冒号/逗号(以及前后的空格)**作为分割符,split之后剩下的有效内容就是引号里的字符串,最后过滤掉分割产生的空字符串就行。
代码示例
import java.util.Arrays; public class QuoteSplitExample { public static void main(String[] args) { String input = "\"strA\" : \"strB\" : \"strC\" : \"strD\", \"strE\" : \"strF\" : \"strG\""; // 分割规则:匹配引号,或者冒号/逗号(前后可带任意空格) String[] rawParts = input.split("\"|\\s*[:,]\\s*"); // 过滤掉空字符串,得到最终结果 String[] result = Arrays.stream(rawParts) .filter(part -> !part.isBlank()) .toArray(String[]::new); // 打印结果验证 for (String s : result) { System.out.println(s); } // 输出:strA, strB, strC, strD, strE, strF, strG } }
正则解释
":匹配双引号本身,把它作为分割点,这样引号内的内容就会被单独分离出来\s*[:,]\s*:匹配冒号:或逗号,,前后允许有任意数量的空格(\s*),把这些分隔符也作为分割点- 用
|把两种规则组合起来,就能覆盖所有不需要的分隔内容
注意事项
如果你的字符串里存在转义双引号(比如"He said \"Hi!\""这种格式),上面的简单正则就会失效,因为它会把转义后的引号也当成分割点。这种情况下,你需要用Pattern和Matcher配合更复杂的正则(比如"([^"\\]|\\.)*")来查找所有合法的引号内子串,但如果是你描述的那种简单格式,上面的split方法完全够用。
内容的提问来源于stack exchange,提问作者Magneton
相关产品推荐
相关产品推荐

