java - Java:如何删除双引号之间的所有换行符
问题描述
我有一个用 Java 解析的大 CSV 文件。问题是,在一些标有“”的文本部分中,我有换行符。我现在正在尝试删除“”部分中的所有换行符,但到目前为止还没有成功。
例如,我有以下 CSV:
"Test Line wo line break"; "Test Line
with line break"
"Test Line2 wo line break"; "Test Line2
with line break"
结果应该是:
"Test Line wo line break"; "Test Line with line break"
"Test Line2 wo line break"; "Test Line2 with line break"
到目前为止,我已经尝试了以下方法:
s.replaceAll("(\\w)*\r\n", "$1");
但是,不幸的是,这取代了所有换行符,也是行尾的换行符。
然后我在正则表达式中添加了双撇号:
s.replaceAll("\"(\\w)*\r\n\"", "$1");
但不幸的是,有了这个,根本没有任何东西可以替代。
你能帮我找出我在这里做错了什么吗?
提前致谢
解决方案
您可以使用简单的正则表达式匹配双引号之间的所有子字符串,"[^"]*"
并删除使用之间的所有换行符
String s = "\"Test Line wo line break\"; \"Test Line \nwith line break\"\n\"Test Line2 wo line break\"; \"Test Line2 \nwith line break\"";
StringBuffer result = new StringBuffer();
Matcher m = Pattern.compile("\"[^\"]*\"").matcher(s);
while (m.find()) {
m.appendReplacement(result, m.group().replaceAll("\\R+", ""));
}
m.appendTail(result);
System.out.println(result.toString());
或者,从 Java 9+ 开始,您可以使用更短的代码:
String s = "\"Test Line wo line break\"; \"Test Line \nwith line break\"\n\"Test Line2 wo line break\"; \"Test Line2 \nwith line break\"";
Matcher m = Pattern.compile("\"[^\"]*\"").matcher(s);
s = m.replaceAll(r -> m.group().replaceAll("\\R+", ""));
System.out.println(s);
输出:
"Test Line wo line break"; "Test Line with line break"
"Test Line2 wo line break"; "Test Line2 with line break"
请参阅在线 Java 演示/ Java 代码演示 #2。
请注意,.replaceAll("\\R+", "")
找到 1 个或多个任何换行符序列并仅从"[^"]*"
匹配的内容中删除它们。
双引号之间的转义序列支持
如果双引号之间的字符串可以包含转义序列,则需要使用不同的模式:
Pattern.compile("\"[^\"\\\\]*(?:\\\\.[^\"\\\\]*)*\"", Pattern.DOTALL)
请注意该Pattern.DOTALL
选项,它将允许.
匹配换行符。
详情:
"
- 一个"
字符[^"\\]*
"
- 除了和字符之外的零个或多个\
字符(?:\\.[^"\\]*)*
- 零个或多个 a 序列\
和它之后的任何字符,然后是零个或多个字符,而不是"
和\
字符"
- 一个"
字符。
推荐阅读
- python - 将颜色空间更改为 HSV 或 LAB 或预处理图像,然后再将其输入神经网络进行训练
- scala - Scala - 生成 Java.sql 日期之间的范围
- angular - 仅当字段类型为“数字”时,FormGroup.valueChanges 才会触发“更改”和“模糊”
- ios - 斯威夫特:如何设置两个日期之间的照片范围?
- android - 在 Android 8 上。+:找不到证书路径的信任锚
- reactjs - 如何在一个组件中使用多个 ReactPixel.track('abc')?
- java - 如何在单独的类中将类字段从主类传递到 Spring 控制器?
- javascript - 是否可以显示依赖项的包版本?
- css - svg 文件中星星的旋转动画
- docker - 如何为 dotnet MVC 应用程序配置默认端口?