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前边是单个字符,后边是个字符串。

相关推荐
宝耶6 分钟前
Java面试题5:List、Set、Map 的区别?各自有哪些实现类?
java·开发语言·list
刘 大 望6 分钟前
MCP详细介绍以及IDE和Spring AI中应用
java·ide·人工智能·spring·ai·aigc·ai编程
Cosmoshhhyyy6 分钟前
《Effective Java》解读第44条:坚持使用标准的函数接口
java·开发语言
毕设源码-朱学姐8 分钟前
【开题答辩全过程】以 基于springBoot的考试成绩管理系统为例,包含答辩的问题和答案
java·spring boot·后端
jing-ya10 分钟前
day 60 图论part11
java·数据结构·算法·图论
常利兵10 分钟前
Java后端定时任务抉择:@Scheduled、Quartz、XXL - Job终极对决
java·数据库·sql
程序员爱酸奶11 分钟前
Java后端工程师成长指南
java·开发语言
me83212 分钟前
【Java】关于控制台 SQL 日志显示查询有值但Swagger不显示字段问题
java·开发语言·sql
tlwlmy12 分钟前
python excel图片批量拼接导出
前端·python·excel
凤山老林13 分钟前
深度解析Skill机制:如何通过Spring AI + 阿里巴巴对接任意大模型实现智能技能调用?
java·人工智能·ai agent·skill·spring ai