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

如何使用正则表达式按双引号分割包含空值的Java字符串

Java按双引号分割字符串的实现方案

需求说明

需要对给定的Java字符串按双引号进行分割,支持双引号包裹的内容为空的场景。
示例原始字符串定义:

String raw = "\"AKINWALE JOHNSON ROTIMI                                \"   \"100000072      \"       \"1985"
                + "0217                         \"  \"                                                                                \"      \"0250000066               \""
                + "\"                                                         08035558619\"  \"22324902758    \"       \"NG0250002    \" \"9113985      \"";

原实现问题分析

你使用的分割代码为String[] split = raw.split("\"(\\w\\s+|\\s+)\"");,存在两处核心缺陷:

  • 正则仅匹配双引号之间为「单词字符+空格」或「纯空格」的场景,无法匹配内容为纯数字、数字+字母组合的情况,会导致切割失败
  • 要求双引号之间至少存在1个字符,无法处理双引号包裹内容为空的场景

推荐实现方案

方案1:正则匹配双引号内容(更稳定)

直接匹配所有双引号包裹的内容,不需要切割,逻辑更直观,完美适配空内容场景:

import java.util.ArrayList;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class SplitDemo {
    public static void main(String[] args) {
        String raw = "\"AKINWALE JOHNSON ROTIMI                                \"   \"100000072      \"       \"1985"
                + "0217                         \"  \"                                                                                \"      \"0250000066               \""
                + "\"                                                         08035558619\"  \"22324902758    \"       \"NG0250002    \" \"9113985      \"";
        
        List<String> resultList = new ArrayList<>();
        // 正则规则:匹配双引号包裹的所有内容,捕获组1为双引号内部的内容
        Pattern pattern = Pattern.compile("\"([^\"]*)\"");
        Matcher matcher = pattern.matcher(raw);
        while (matcher.find()) {
            resultList.add(matcher.group(1));
        }
        // 转成字符串数组(按需使用)
        String[] result = resultList.toArray(new String[0]);
    }
}

正则"([^\"]*)"说明:匹配开头双引号后,捕获0个或多个非双引号的字符,再匹配闭合双引号,支持空内容、任意非双引号字符的场景。

方案2:split切割后筛选结果(更简单)

如果坚持用split实现,可以先按双引号全切割,再取下标为奇数的元素即可(切割后偶数下标为双引号外的内容,奇数下标为双引号内的内容):

String[] allParts = raw.split("\"");
List<String> resultList = new ArrayList<>();
// 从下标1开始,步长为2取元素,就是所有双引号内部的内容
for (int i = 1; i < allParts.length; i += 2) {
    resultList.add(allParts[i]);
}
String[] result = resultList.toArray(new String[0]);

这个方案不需要写复杂正则,性能更高,也能完美处理空内容场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 10:24:01