Java【代码 19】含有换行符\r\n的字符串匹配(源码分享)处理Word文档里的Excel表格数据

1.问题说明

Java 后台读取包含 Excel 表格的 Word 文档,此时正文数据字符串包含 \r\n也就是换行符,想要通过 yaml 配置文件匹配 Excel 表格的表头,但是无论如何都是匹配不上:

java 复制代码
String excelHeader = configuration.getExcelHeader();
boolean contains = contentStr.contains(excelHeader);

配置如下:

yaml 复制代码
# 1.匹配结果是 false
excelHeader: "姓名\r\n身份证号\r\n手机号\r\n户籍地\r\n"

# 2.匹配结果也是 false
excelHeader: "姓名\\r\\n身份证号\\r\\n手机号\\r\\n户籍地\\r\\n"

但是在 debug 模式下,将 excelHeader设置成 姓名\r\n身份证号\r\n手机号\r\n户籍地\r\n时可以完成匹配:

java 复制代码
sonString.contains("姓名\r\n身份证号\r\n手机号\r\n户籍地\r\n");
// 此时
result = true

2.问题分析

使用 debug 模式查看了读取的正文数据,查看字符串值时发现 \r\n转换为 ASCII 值 1314

但是读取的配置字符串被转义为 \\r\\n且转换为 ASCII 时更加离谱:

3.问题解决

java 复制代码
// 【无法匹配】配置
private String excelHeader;
// 【无法匹配】使用
configuration.getExcelHeader();

// 【可以匹配】配置
private Object excelHeader;
// 【可以匹配】使用
configuration.getExcelHeader().toString();

在 Java 中,toString() 方法通常不会将 \r 转义为 \r。这是因为 toString() 方法的目的是返回对象的字符串表示形式,而不是对特殊字符进行转义。如果直接使用 String 类型,配置里的 \r都会被认为是字符串,且由于\的特殊性,会进行转义 \\导致 \r变成了 \\r前边是单个字符,后边是个字符串。

相关推荐
喵个咪32 分钟前
go-wind-cms 微服务架构设计:为什么基于 Kratos?
后端·微服务·cms
神奇小汤圆38 分钟前
百度面试官:Redis 内存满了怎么办?你有想过吗?
后端
喵个咪39 分钟前
Headless 架构优势:内容与展示解耦,一套 API 打通全端生态
前端·后端·cms
开心就好202541 分钟前
HTTPS超文本传输安全协议全面解析与工作原理
后端·ios
小江的记录本43 分钟前
【JEECG Boot】 JEECG Boot——数据字典管理 系统性知识体系全解析
java·前端·spring boot·后端·spring·spring cloud·mybatis
神奇小汤圆44 分钟前
Spring Batch实战
后端
喵个咪1 小时前
传统 CMS 太笨重?试试 Headless 架构的 GoWind,轻量又强大
前端·后端·cms
程序员木圭1 小时前
07-数组入门必看!Java数组的内存分析02
java·后端
喵个咪1 小时前
Go 语言 CMS 横评:风行 GoWind 对比传统 PHP/Java CMS 核心优势
前端·后端·cms
面向Google编程1 小时前
从零学习Kafka:位移与高水位
大数据·后端·kafka