提问人:eaidy 提问时间:8/9/2023 更新时间:8/9/2023 访问量:86
如何从 trim() 方法中排除“\n”转义字符?
How to exclude "\n" escape character from trim() method?
问:
给定文本,它包含信息行作为换行符。我需要执行类似自定义解析之类的操作来拆分这些行并将它们保存到数组中。由于文本中的新行由转义字符“\n”确定,因此我根据这些转义字符执行解析。问题是,一些文本数据在主数据文本之外有很多空格。当我继续执行另一个拆分操作以将行转换为键值对时,这些空格在运行时给我带来了问题。
Java 中有什么方法可以让我修剪字符串但排除“\n”转义字符?
答:
0赞
Michael Gantman
8/9/2023
#1
您将不得不手动完成,但这并不难。如果您已经根据字符将字符串拆分为多个字符串,则所有字符串将只有一次字符或根本没有字符,如果您的字符串具有字符,则它始终是最后一个。所以,你可以做的是\n
\n
\n
boolean newLinePresent = myString.endsWith("\n");
myString = myString.trim();
if(newLinePresent) {
myString = myString + "\n";
}
评论
2赞
Lii
8/9/2023
别忘了它返回一个 NEW 字符串,它不会修改字符串!您必须将返回值分配给某些东西。trim
0赞
Michael Gantman
8/9/2023
是的,修改了代码,感谢您的捕获,但这并不能消除答案的清晰度
3赞
VGR
8/9/2023
#2
如果要从文件中读取,请不要将整个文件内容读取到单个字符串中。相反,修剪每行:
List<String> lines = new ArrayList<>();
try (BufferedReader reader = Files.newBufferedReader(
Path.of("C:\\Users\\caliskanata\\Documents\\file.txt"))) {
String line;
while ((line = reader.readLine()) != null) {
lines.add(line.trim());
}
}
如果你的文本不是来自文件,你可以按照 Slevin 的建议拆分它,并修剪每个部分:
String[] untrimmedLines = text.split("\\R");
List<String> lines = new ArrayList<>(untrimmedLines.length);
for (String untrimmedLine : untrimmedLines) {
lines.add(untrimmedLine.trim());
}
您也可以使用 Stream 来执行此操作:
List<String> lines =
Pattern.compile("\\R").splitAsStream(text).map(String::trim).toList();
由于您编写了“将它们保存到数组中”,因此您可以轻松地将 List 转换为数组:
String[] array = lines.toArray(String[]::new);
评论
0赞
user16320675
8/9/2023
但请注意,使用 one-argument 会丢弃文本末尾的所有换行符(甚至可能是想要的?split()
评论
trim
\n
\n
text.split("\n")
\\R
text.split("\\R")
text.split("\n", -1)
\n
text.stripIndent().indent(Integer.MIN_VALUE)