Форматирование Кода Java с помощью сценария оболочки

Если массив простой и порядок имеет значение, поэтому эти две строки могут помочь

//Assume
var a = ['a','b', 'c']; var b = ['a','e', 'c'];  

if(a.length !== b.length) return false;
return !a.reduce(
  function(prev,next,idx, arr){ return prev || next != b[idx] },false
); 

Уменьшить количество проходов по одному из массивов и возвращает «ложь», если хотя бы один элемент из «а» не является ни равно элементу 'b' Просто оберните это в функцию

6
задан Svante 16 July 2009 в 14:41
поделиться

6 ответов

Ну, у меня было немного свободного времени, поэтому я решил пережить старые добрые дни Linux:]

Прочитав немного об awk и sed, я решил, что может быть лучше использовать оба варианта, поскольку проще добавить отступ в awk и проанализировать строки в sed.

Вот ~ / sed_script, форматирующий исходный файл:

    # delete indentation
    s/^ \+//g

    # format lines with class
    s/^\(.\+class.\+\) *\({.*\)$/\1\n\2/g

    # format lines with methods
    s/^\(public\|private\)\( \+static\)\?\( \+void\)\? \+\(.\+(.*)\) *\({.*\)$/\1\2\3 \4\n\5/g

    # format lines with other structures
    /^\(if\|else\|for\|while\|case\|do\|try\)\([^{]*\)$/,+1 {   # get lines not containing '{'
                                                            # along with the next line
      /.*{.*/ d             # delete the next line with '{'
      s/\([^{]*\)/\1 {/g    # and add '{' to the first line
    }

А вот ~ / awk_script который добавляет отступ:

    BEGIN { depth = 0 }
    /}/   { depth = depth - 1 }
          {
              getPrefix(depth)
              print prefix $0
          }
    /{/   { depth = depth + 1 }

          function getPrefix(depth) {
              prefix = ""
              for (i = 0; i < depth; i++) { prefix = prefix "    "}
              return prefix
          }

И вы используете их вот так:

    > sed -f ~/sed_script ~/file_to_format > ~/.tmp_sed
    > awk -f ~/awk_script ~/.tmp_sed

Это далеко не подходящий инструмент форматирования, но я надеюсь, что он подойдет как образец сценария для справки:] Удачи вам в обучении.

5
ответ дан 10 December 2019 в 02:51
поделиться

Быстрая, ошибочная попытка, но она работает на вашем примере ввода:

BEGIN {depth = 0;}
/{$/  {depth = depth + 1}
/^}/  {depth = depth - 1}
      {prefix = ""; for (i = 0; i < depth; i++) { prefix = prefix "  "} print prefix $0 ; }

Это сценарий awk: поместите его в файл и выполните

awk -f awk_script_file source_file

Очевидные недостатки этого включают:

  • Он не распознает места без скобок, где вы хотели бы сделать отступ, например

     if (foo)
     бар();
    
  • Он изменяет глубину отступа на основе фигурных скобок в комментариях и строковых литералах

  • Он не обнаруживает {фигурные скобки, за которыми следуют комментарии
2
ответ дан 10 December 2019 в 02:51
поделиться

Думаю, это можно сделать с помощью простого сценария sed. Используйте 1 переменную (bCount), в которой хранится количество '{' (открывающие скобки) - (минус) количество '}' (закрывающие скобки) Затем я просматривал файл и вставлял «вкладки» в соответствии с фактическим количеством используемых скобок. Итак,

public class Super{ //bCount=0
public static void main(String[] args){ //bCount=1
System.out.println("Hello world"); //bCount=2
int a=0; //bCount=2
....and so on

так что вставьте 0 вкладок в строку 0

1 вкладку в строке 1

2 вкладки в строке 3 и 4 и так далее ...

1
ответ дан 10 December 2019 в 02:51
поделиться

Это определенно возможно ... Я просто не понимаю, зачем вам тратить на это время? :] Для этого достаточно инструментов, и любая достойная IDE предоставляет способ переформатировать исходный код (включая Eclipse).

Например, для форматирования в Eclipse 3.4 (должно быть аналогично в других версиях) просто щелкните правой кнопкой мыши в своем проекте или файле и выберите в меню «Источник> Формат».

И если вам нужно изменить способ форматирования кода, просто перейдите в «Настройки> Java> Стиль кода> Форматирование» и измените шаблон. Насколько мне известно, в JDeveloper и NetBeans он очень похож.

1
ответ дан 10 December 2019 в 02:51
поделиться

Взгляните на CLI для Jalopy . Jalopy - довольно мощный модуль форматирования исходных файлов.

0
ответ дан 10 December 2019 в 02:51
поделиться

Рассмотрим с использованием Jindent , который является «простым инструментом java с использованием Emacs». Это бесплатный сценарий оболочки, который является частью проекта PTOLMEA в Беркли.

0
ответ дан 10 December 2019 в 02:51
поделиться
Другие вопросы по тегам:

Похожие вопросы: