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

如何基于指定正则表达式过滤字符串集合并通过jXLS写入Excel?

嘿,这个需求其实很好实现,核心思路就是先对字符串数组做正则过滤,再把过滤后的结果交给jXLS去写入Excel。我给你拆解成具体步骤和代码示例,你可以直接套用:

步骤1:实现正则过滤逻辑

首先我们用Java的Pattern和Matcher来完成正则匹配,结合Stream API可以很优雅地过滤数组。这里默认你用的是Java环境(毕竟jXLS是Java库):

import java.util.List;
import java.util.regex.Pattern;
import java.util.stream.Collectors;

// 1. 定义你的正则规则,比如这里匹配以"report_"开头的字符串
String regexRule = "^report_.*";
Pattern pattern = Pattern.compile(regexRule);

// 2. 假设你的原始字符串数组是String[] originalStrings
String[] originalStrings = {"report_2024", "log_01", "report_weekly", "temp_file"};

// 3. 转成List并过滤(如果是List直接用就行)
List<String> filteredStrings = List.of(originalStrings)
    .stream()
    // 注意:如果原始集合可能有null,要先判空避免NPE
    .filter(str -> str != null && pattern.matcher(str).matches())
    .collect(Collectors.toList());

小提示:如果需要部分匹配(比如字符串中包含某个模式,而不是完全匹配),把.matches()换成.find()就行。

步骤2:结合jXLS写入过滤后的内容

接下来分两种常见的jXLS使用场景给你示例:

场景1:基于模板的写入(jXLS推荐用法)

如果你之前是用模板文件来生成Excel,只需要把过滤后的列表作为数据源传入jXLS的上下文即可:

import org.jxls.common.Context;
import org.jxls.util.JxlsHelper;
import java.io.*;

public void writeFilteredDataToExcel() {
    // 这里用步骤1得到的filteredStrings
    List<String> filteredStrings = getFilteredStrings(); // 替换成你的过滤逻辑

    // 1. 创建jXLS上下文,把过滤后的列表存入变量
    Context context = new Context();
    context.putVar("filteredData", filteredStrings);

    // 2. 加载模板并生成Excel
    try (InputStream templateStream = this.getClass().getResourceAsStream("/excel_template.xlsx");
         OutputStream outputStream = new FileOutputStream("final_output.xlsx")) {
        JxlsHelper.getInstance().processTemplate(templateStream, outputStream, context);
    } catch (IOException e) {
        e.printStackTrace();
    }
}

对应的Excel模板里,你需要用jXLS的指令来遍历过滤后的列表,比如在单元格里写:

<jx:forEach items="${filteredData}" var="item">${item}</jx:forEach>

(记得把这个单元格设置为jXLS的指令区域,或者用注释指令,具体看你之前的模板写法)

场景2:直接创建Excel写入(无模板)

如果是直接用jXLS API动态创建Excel内容,就遍历过滤后的列表逐行写入:

import org.jxls.Workbook;
import org.jxls.builder.xls.XlsCommentAreaBuilder;
import org.jxls.common.CellRef;
import org.jxls.common.Context;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.List;

public void writeDirectlyToExcel() {
    List<String> filteredStrings = getFilteredStrings(); // 替换成你的过滤逻辑

    // 1. 创建空工作簿
    Workbook workbook = XlsCommentAreaBuilder.createWorkbook();
    Context context = new Context();
    XlsCommentAreaBuilder.build(workbook, "Sheet1", context);

    // 2. 遍历过滤后的列表,写入Sheet1的A列
    int startRow = 0; // 从第1行开始(行号从0计数对应Excel的第1行)
    for (String str : filteredStrings) {
        workbook.getCell(new CellRef("Sheet1!A" + (startRow + 1))).setValue(str);
        startRow++;
    }

    // 3. 保存Excel文件
    try (FileOutputStream outputStream = new FileOutputStream("direct_output.xlsx")) {
        workbook.write(outputStream);
    } catch (IOException e) {
        e.printStackTrace();
    }
}
一些额外注意事项
  • 正则转义:如果你的规则里包含特殊字符(比如.、*、\),记得用双反斜杠\\转义,比如匹配包含.的字符串要写\\.;
  • 性能优化:如果需要处理大量数据,建议提前编译Pattern(不要在循环里重复编译),避免性能损耗;
  • 空值处理:一定要记得在过滤时判空,避免NullPointerException。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 11:33:10