0

我正在尝试创建一个方法,该方法删除字符串末尾的空行:

public static String deleteBlankLinesAtEnd(String input)
{
    input = trimToEmptyString(input);
    return input.replaceFirst("\\n{2,}\\z", "");
}

但是,它似乎也删除了输入开头的空行。

我有一个小单元测试:

@Test
public void testDeleteBlankLinesAtEnd()
{
    assertEquals("hej", TextUtils.deleteBlankLinesAtEnd("hej\n\n"));
    assertEquals("hej\nhej", TextUtils.deleteBlankLinesAtEnd("hej\nhej\n\n"));
    assertEquals("hej\n\nhej", TextUtils.deleteBlankLinesAtEnd("hej\n\nhej\n\n"));
    assertEquals("\n\nhej\n\nhej", TextUtils.deleteBlankLinesAtEnd("\n\nhej\n\nhej\n\n"));
}

3个第一个运行良好,最后一个失败。

更新:当然,trimToEmptyString() 是我的问题,因为它也会修剪开头..

public static String trimToEmptyString(String input)
{
    if (input == null)
    {
        return "";
    }
    return input.trim();
}

因此,使用正则表达式的所有内容都运行良好。

4

3 回答 3

1

如何替换所有空白行,包括充满空格的行。

input.replaceFirst("\\n\\s+$", "\n")
于 2012-04-16T12:03:08.777 回答
1

正则表达式看起来不错;我怀疑有问题trimToEmptyString()

于 2012-04-16T12:25:33.727 回答
1

你可以这样做:

public static String deleteBlankLinesAtEnd(String input)
{
    input = trimToEmptyString(input);
    return input.replaceFirst("\\n{2,}\\z$", "");
}

$应该指示正则表达式匹配字符串末尾之前的任何内容。在这种情况下,它应该匹配字符串末尾之前的任何新行。

于 2012-04-16T11:58:13.513 回答