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

如何使用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 07:20:38