缩进Java输出

时间:2010-06-29 00:21:16

标签: java indentation graphviz

我正在Java程序中生成graphviz DOT文件(这是一个示例:http://www.graphviz.org/Gallery/directed/cluster.html)。我想基于大括号自动缩进此文件。在Java中有一种简单的方法吗?谢谢!

2 个答案:

答案 0 :(得分:2)

像这样的嵌套上下文最好用堆栈来表达,但你可以通过计算来做这种解析的廉价版本 - 它不是真的“正确”,因为它不是一个完整的解析器(首先,这不是不考虑评论,并且可能还有其他一些方法可以打破,比如一个包含括号的名称),但对于一次性来说足够好了:

伪码

int indent=0;
for (line):
    print ('\t' for each indent) + line
    if (line.contains('{'))indent++
    if (line.contains('}')} indent --;

如果显示示例输出时括号中的线条尚未断开,请通过断开换行符“{”或“}”来重复这些行。

答案 1 :(得分:0)

我想这个问题有各种解决方案。根据要求,您可能需要一个优雅的解决方案,可以让您轻松地为最终输出设置模板。然后,您需要了解graphviz文件格式,并可能按块识别代码作为节点。然后工作很简单:输出节点(我的意思是代表节点的代码)深度为i,其中包含indents = i * 4个空格。

由于我不了解graphviz文件,我可能会将其视为纯文本文件。 所以你需要做的就是

  1. open the graph file, 
  2. create a temp file for the final output
  3. set indent = 0.
  4. read one line, if not null, search the line for braces, for every opening brace, ++indent
     and --indent for every closing brace.
  NOTE:you need to escape the escaped braces if there is any. say "{" or \{


  5. write the line to the temp file with preceding spaces = 4*indent (assuming you want 4 spaces for every indent)
  6. close both files. if needed, replace the old file with the temp file.

由于我可能没有正确理解你的设备,因此伪代码在功能上可能是无用的。但你明白了这一点; - )