Java正则表达式:如何替换文本中连续的换行符和空格?

Java正则表达式:巧妙去除多余换行符和空格

本文提供一个Java正则表达式解决方案,用于高效地替换文本中连续的换行符(\n),包括可能夹杂其中的空格。 目标是将连续的换行符(即使中间有空格)替换为单个换行符,同时尽量保持文本结构。

问题描述: 如何使用Java正则表达式将文本中连续的\n(包含中间空格)替换为单个\n

输入文本示例:

\naaaaaa: 
\n\nbbbbbbb 
\n \n\nccccc
\n\n\n

期望输出结果:

\naaaaaa: 
bbbbbbb 
ccccc

解决方案:

以下Java代码使用正则表达式\n\s*\n+来实现这一目标:

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class ReplaceNewLine {
    public static void main(String[] args) {
        String input = "\nAAAAAA: \n\nBBBBBBB \n \n\nCCCCC\n\n\n";
        Pattern pattern = Pattern.compile("\\n\\s*\\n+"); // 注意此处正则表达式的修改
        Matcher matcher = pattern.matcher(input);
        String output = matcher.replaceAll("\n");
        System.out.println(output);
    }
}

代码解释:

  • \\n: 匹配换行符\n。(由于\在Java字符串中需要转义,所以使用\\
  • \\s*

    : 匹配零个或多个空格字符。
  • \\n+: 匹配一个或多个换行符。 这确保了连续的换行符会被匹配到。

replaceAll("\n") 将所有匹配到的连续换行符(包含中间空格)替换为单个换行符。 该正则表达式比\n\s*\n更精确,因为它能处理多个连续的换行符。

这个改进后的解决方案更有效地处理了各种连续换行符的情况,并避免了不必要的复杂性。 它简洁地解决了问题,并提供了清晰易懂的代码。