Groovy 删除 StringBuilder 对象中多余的空行
Groovy removing extra empty lines in StringBuilder Object
正在尝试删除由 StringBuilder 生成的文件中超过 2 个空行的任何额外空行。代码在 groovy 中,所以我似乎不明白为什么简单的 java 程序似乎不起作用。尝试了 3 件事...有什么建议吗?请参阅下面的代码片段
正则表达式不执行任何操作。
private static final removeExtraLines1(StringBuilder text)
{
String twoLines = "MIAW";
Pattern extraLines = Pattern.compile("\n")
text.replaceAll(extraLines, twoLines);
}
我自己的 deleteCharAt 方法也不行吗?
private void removeExtraLines(StringBuilder text)
{
int i = 0;
while(i < text.length()-1)
{
if(text.charAt(i) == System.lineSeparator() && text.charAt(i++) == System.lineSeparator())
{
text.deleteCharAt(i++);
System.out.println("REPLACED AN EMPTY LINE");
}
}
}
修改 toString() 方法表示正则表达式方法 replaceAll 已弃用。
@Override
String toString()
{
def padding = " " * (4 * (level - 1) )
padding + "cat level $level [$title]: " +
contained.collect {
it.toPaddedString(padding) }
////My Code
String twoLines = System.lineSeparator()+System.lineSeparator();
Pattern extraLines = Pattern.compile(System.lineSeparator()+ System.lineSeparator()+ System.lineSeparator()+System.lineSeparator())
_toString().replaceAll(extraLines, twoLines)
}
你需要使用++i(预递增)而不是i++(post递增)
if(text.charAt(i) == System.lineSeparator() && text.charAt(++i) == System.lineSeparator())
{
text.deleteCharAt(++i);
System.out.println("REPLACED AN EMPTY LINE");
}
结帐Pre & post increment operator behavior in C, C++, Java, & C#
这里的问题是每种方法都有一个错误:
replaceAll()
不修改StringBuilder
。相反,它 returns 一个新的 String
。另外,正则表达式不正确。
- 如 Vijay 所述,post/pre-increment 的使用不当。
- 好的,我不知道。我放弃了尝试理解第三种方法。
最简单的方法是使用 replaceAll()
和适当的正则表达式,然后使用 replace()
获取 replaceAll()
的输出并使其成为 [= 的全部内容12=]:
private static final removeExtraLines1(StringBuilder text) {
text.replace(0, text.size(), builder.replaceAll('\n\n', '\n'))
}
正在尝试删除由 StringBuilder 生成的文件中超过 2 个空行的任何额外空行。代码在 groovy 中,所以我似乎不明白为什么简单的 java 程序似乎不起作用。尝试了 3 件事...有什么建议吗?请参阅下面的代码片段
正则表达式不执行任何操作。
private static final removeExtraLines1(StringBuilder text)
{
String twoLines = "MIAW";
Pattern extraLines = Pattern.compile("\n")
text.replaceAll(extraLines, twoLines);
}
我自己的 deleteCharAt 方法也不行吗?
private void removeExtraLines(StringBuilder text)
{
int i = 0;
while(i < text.length()-1)
{
if(text.charAt(i) == System.lineSeparator() && text.charAt(i++) == System.lineSeparator())
{
text.deleteCharAt(i++);
System.out.println("REPLACED AN EMPTY LINE");
}
}
}
修改 toString() 方法表示正则表达式方法 replaceAll 已弃用。
@Override
String toString()
{
def padding = " " * (4 * (level - 1) )
padding + "cat level $level [$title]: " +
contained.collect {
it.toPaddedString(padding) }
////My Code
String twoLines = System.lineSeparator()+System.lineSeparator();
Pattern extraLines = Pattern.compile(System.lineSeparator()+ System.lineSeparator()+ System.lineSeparator()+System.lineSeparator())
_toString().replaceAll(extraLines, twoLines)
}
你需要使用++i(预递增)而不是i++(post递增)
if(text.charAt(i) == System.lineSeparator() && text.charAt(++i) == System.lineSeparator())
{
text.deleteCharAt(++i);
System.out.println("REPLACED AN EMPTY LINE");
}
结帐Pre & post increment operator behavior in C, C++, Java, & C#
这里的问题是每种方法都有一个错误:
replaceAll()
不修改StringBuilder
。相反,它 returns 一个新的String
。另外,正则表达式不正确。- 如 Vijay 所述,post/pre-increment 的使用不当。
- 好的,我不知道。我放弃了尝试理解第三种方法。
最简单的方法是使用 replaceAll()
和适当的正则表达式,然后使用 replace()
获取 replaceAll()
的输出并使其成为 [= 的全部内容12=]:
private static final removeExtraLines1(StringBuilder text) {
text.replace(0, text.size(), builder.replaceAll('\n\n', '\n'))
}