Как отформатировать этот текст? Ява

голоса
46

Так вот проблема. Включите текстовый файл в правильное форматирование. Суть проблемы заключается в том, что я должен прочитать файл, текстовый файл, который содержит код в этом текстовом файле. Код в том , что имеет ужасное форматирование. Проблема форматирования в том , что , когда есть фигурная скобка , как это {, следующая строка не 4 пространства справа, это просто все очень налево. Как это:

while (blah blah blah) { 
sysout(blahblahblah);

Когда это должно быть так:

while (blah blah blah) { 
    sysout(blahblahblah); 

И нет никаких других различий между 2. Единственным правилом является просто сделать так, каждый раз, когда есть фигурная скобка, как это {, чтобы убедиться, что следующая строка 4 пробела вправо. И наоборот. Таким образом, каждый раз, когда есть фигурная скобка, как это}, следующая строка должна быть 4 пробела слева. Я надеюсь, что вы, ребята, это понимают.

Это моя проблема. Я узнал, как сделать программу, где фрагмент текста с несколькими пробелами и линиями превращена в одну линию с одним пробелом каждый раз. Не было слишком трудно.

Для этого, однако, я должен держать все на одной и той же линии. Так что если есть 30 строк, новая программа , которую я сделать также 30 строк. Мне нужно держать очень похожий интервал, но простая разница есть вся скобка вещь. Поэтому в основном я просто должен сделать линию после скобки либо 4 пробела вправо, а затем сделать то же самое , так что для левых 4 пространств , если это }фигурная скобка.

Так как же я могу сделать это точно? Я не знаю, как просто исправить, что не портя другие вещи. Это такая простая вещь, которую я должен сделать; просто сделать линии следующие брекеты 4 пробела вправо или влево, но я просто понятия не имею, какой синтаксис использовать для достижения этой цели. Благодаря!

EDIT: Это, возможно, только что сделал это проще. Таким образом, в основном, все линии либо конец с правой фигурной скобкой, левой фигурной скобкой или точкой с запятой. Не важно что. Таким образом, каждый раз, когда один из этих выскакивает, это конец строки. Так может быть, если вы знаете, как это делает его легче, то я просто дать вам знать.

Задан 29/02/2016 в 23:04
пользователем
На других языках...                            


3 ответов

голоса
0

Есть программы , которые будут делать это за вас автоматически, так что вам не нужно изобретать колесо. Например, в Eclipse, тип: ctrl-a(выбрать все) ctrl-i(авто-отступ).

Ответил 29/02/2016 в 23:43
источник пользователем

голоса
0

Вот псевдокод вы можете начать с:

int indentLevel = 0;
while(currentchar = nextchar != null){
    printCurrentChar
    if(currentchar is '{'){
        indentLevel++;
    }else if(currentchar is '}'){
        indentLevel--;
    }else if(currentchar is '\n'){
        print indentLevel * 4 spaces
    }
}

Вам, возможно, придется иметь дело с сбежавшими скобками и другими осложнениями, хотя

Ответил 29/02/2016 в 23:54
источник пользователем

голоса
0

Вы можете сделать это довольно легко с помощью регулярных выражений. Если вы не знаете, и планирует быть программистом, то обязательно научиться. Это сэкономит для вас много времени в будущем.

public class TextIndentator
{

    public static void main(String[] args) throws IOException
    {
        File uglyText = new File("ugly.txt");
        System.out.println((uglyText.exists() && !uglyText.isDirectory()) ? getNiceText(uglyText) : "FILE \"ugly.txt\" at " + System.getProperty("user.dir") + " do not exists");
    }

    static String getNiceText(File uglyText) throws IOException
    {
        // Opening file
        FileInputStream inputStream = new FileInputStream(uglyText);
        InputStreamReader isr = new InputStreamReader(inputStream);
        BufferedReader reader = new BufferedReader(isr);
        StringBuilder builder = new StringBuilder();
        StringBuffer buffer = new StringBuffer();

        // Algorithm starts here
        String line;
        boolean checkNext = false;
        while ((line  = reader.readLine()) != null)
        {
            if(checkNext)
            {
                // If previous line finished with '{' (And optionally with some whitespaces after it) then, replace any amount (including zero) of whitespaces with 4 witespaces
                builder.append(line.replaceFirst("\\s*", "    "));
            }
            else
            {
                builder.append(line);
            }
            // Check if line line finishes with { (And optionally with some whitespaces after it)
            if(line.matches(".*\\{\\s*")) checkNext = true;
            else checkNext = false;

            //Append line separator at the end of line
            builder.append(System.getProperty("line.separator"));
        }
        return builder.toString();
    }

}
Ответил 01/03/2016 в 02:01
источник пользователем

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more