我想将文本保存到文件中,以便缩进某些段落(段落的每一行都是缩进的)。我正在使用BufferedWriter
或Scanner
或其他任何内容。如何在不计算角色的情况下进行此操作?
答案 0 :(得分:2)
您必须找到所有换行符,并在每个换行符后插入适当数量的空格。
因此,代码总是需要查看每个字符,并且可能还要解析文本以便找到缩进的位置和数量。
您可以实现处理解析和格式化的java.io.Writer
。即使最有效的方法是直接在char缓冲区上工作,它也比创建一个新的String并使用String函数复杂得多,因此通常最好在效率之前寻求稳定性。
如果整个文件的缩进相同,则可以执行一个简单的String.replaceAll(),并用换行符后跟多个空格替换换行符。如果你需要动态缩进,你可能需要解析(找到)缩进级别改变的位置,检查每个字符的换行符或缩进级别是否变化,立即购买它变得复杂......
答案 1 :(得分:0)
这是一个解决方案。此方法用缩进替换所有换行符。缩进级别需要indent()
调用。要取消注意,请调用unindent()
方法。
public class IndentPrintWriter extends java.io.PrintWriter
{
private boolean newLine;
private String singleIndent = " ";
private String currentIndent = "";
public IndentPrintWriter(Writer pOut, String indent)
{
super(pOut);
this.singleIndent = indent;
}
public void indent()
{
currentIndent += singleIndent;
}
public void unindent()
{
if (currentIndent.isEmpty()) return;
currentIndent = currentIndent.substring(0, currentIndent.length() - singleIndent.length());
}
@Override
public void print(String pString)
{
// indent when printing at the start of a new line
if (newLine)
{
super.print(currentIndent);
newLine = false;
}
// strip the last new line symbol (if there is one)
boolean endsWithNewLine = pString.endsWith("\n");
if (endsWithNewLine) pString = pString.substring(0, pString.length() - 1);
// print the text (add indent after new-lines)
pString = pString.replaceAll("\n", "\n" + currentIndent);
super.print(pString);
// finally add the stripped new-line symbol.
if (endsWithNewLine) println();
}
@Override
public void println()
{
super.println();
newLine = true;
}
}