Отступ вывода Java - PullRequest
       4

Отступ вывода Java

2 голосов
/ 29 июня 2010

Я создаю DOT-файл graphviz в Java-программе (вот пример того, как он выглядит: http://www.graphviz.org/Gallery/directed/cluster.html). Я хочу автоматически сделать отступ для этого файла на основе фигурных скобок. Есть ли простой способ сделать это на Java? Спасибо!

Ответы [ 2 ]

2 голосов
/ 29 июня 2010

Вложенные контексты, подобные этому, действительно лучше всего выражаются стеками, но вы можете сделать дешевую версию этого вида синтаксического анализа, просто посчитав - это не совсем «правильно» в том смысле, что это не полный синтаксический анализатор (с одной стороны, это не Не принимайте во внимание комментарии, и, возможно, есть несколько других способов, которыми он может сломаться, например, имя, которое содержит скобки), но достаточно хороших для одноразового использования:

psuedocode

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

Если строки в скобках еще не разбиты, как показывает пример выходных данных, итерируйте строки, разбивая ввод в новых строках, '{' или '}'.

0 голосов
/ 29 июня 2010

Полагаю, у этого вопроса есть разные решения.В зависимости от требования, вы можете захотеть элегантное решение, которое может позволить вам легко оценить шаблон для окончательного результата.Затем вам нужно понять формат файла graphviz и, возможно, идентифицировать код по блокам как узлы.Тогда задача проста: вывести узлы (я имею в виду код, повторяющий узел) глубины i с отступами = 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.

Поскольку я, вероятно, неправильно понимаю ваше усвоение, псевдокод может быть бесполезным в функциональном отношении.Но у тебя есть идея; -)

...