我正在尝试创建一个方法,删除字符串末尾的空行:
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"));
}
第一个运行良好,最后一个运行失败。
更新:当然,trimToEmptyString()是我的问题,因为它也会修改开头..
public static String trimToEmptyString(String input)
{
if (input == null)
{
return "";
}
return input.trim();
}
所以正则表达式的所有内容都运行良好。
答案 0 :(得分:1)
你可以这样做:
public static String deleteBlankLinesAtEnd(String input)
{
input = trimToEmptyString(input);
return input.replaceFirst("\\n{2,}\\z$", "");
}
$
应该指示正则表达式匹配字符串结尾之前的任何内容。在这种情况下,它应该匹配字符串结尾之前的任何新行。
答案 1 :(得分:1)
如何更换所有空行,包括满空格的行。
input.replaceFirst("\\n\\s+$", "\n")
答案 2 :(得分:1)
正则表达式看起来不错;我怀疑trimToEmptyString()
存在问题。