Wie formatiere ich diesen Text? Java

stimmen
46

Also hier ist das Problem. Drehen Sie eine Textdatei in die korrekte Formatierung. Der Punkt des Problems ist , dass ich eine Datei zu lesen, eine Textdatei, der Code in dieser Textdatei enthält. Der Code in das hat schreckliche Formatierung. Die Formatierung Problem ist , dass , wenn es eine geschweifte Klammer wie dieser ist {, wird die nächste Zeile nicht 4 Stellen nach rechts, es ist einfach alles zu ganz links. So was:

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

Wenn es sollte sein:

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

Und es gibt keine weiteren Unterschiede zwischen dem 2. Die einzige Regel ist einfach zu machen, so dass jedes Mal eine geschweifte Klammer wie dies {, um sicherzustellen, dass die nächste Zeile 4 Felder auf der rechten Seite. Und umgekehrt. So gibt jedes Mal eine geschweifte Klammer wie dies ist}, die nächste Zeile sollte 4 Leerzeichen seine nach links. Ich hoffe, euch dies zu verstehen.

Das ist mein Problem. Ich habe gelernt, wie man ein Programm zu machen, wo ein Stück Text mit mehreren Flächen und Linien in eine einzige Zeile mit einem einzigen Raum jedes Mal eingeschaltet wird. War das nicht zu hart.

Obwohl, ich Hierzu müssen auf der gleichen Linie , alles zu halten. Also , wenn es 30 Zeilen ist, ich das neue Programm machen , ist auch 30 Zeilen. Ich brauche sehr ähnlich Abstand zu halten, aber der einfache Unterschied ist die ganze Klammer Sache. Also im Grunde muss ich nur noch die Linie nach einer Klammer machen entweder 4 Stellen nach rechts, und dann das Gleiche tun , damit es auf der linken Seite 4 Leerzeichen, wenn es eine ist }geschweifte Klammer.

Also, wie kann ich tun, das genau? Ich weiß nicht, wie man nur, dass zu beheben, ohne andere Dinge vermasselt. Es ist so eine einfache Sache, die ich zu tun haben; macht nur die Linien im Anschluss an den Streben 4 Stellen nach rechts oder links, aber ich habe keine Ahnung, welche Syntax zu verwenden, um dies zu erreichen. Vielen Dank!

EDIT: Dies könnte nur es leichter gemacht. Also, im Grunde entweder alle Linien mit einer rechten geschweiften Klammer enden, eine linke geschweifte Klammer oder ein Semikolon. Egal was. Also jedes Mal eine jener erscheint, es ist das Ende einer Zeile. Vielleicht, wenn Sie wissen, wie das macht es einfacher, dann bin ich im Stich gelassen nur Sie wissen.

Veröffentlicht am 29/02/2016 um 23:04
vom benutzer
In anderen Sprachen...                            


3 antworten

stimmen
0

Es gibt Programme , die dies für Sie automatisch tun wird, so dass Sie brauchen nicht das Rad neu zu erfinden. Zum Beispiel in Eclipse, Typ: ctrl-a(Alle auswählen)ctrl-i (auto-indent).

Beantwortet am 29/02/2016 um 23:43
quelle vom benutzer

stimmen
0

Hier ist ein Pseudo-Code mit denen Sie beginnen können:

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
    }
}

Sie könnten allerdings mit entkam Klammern und anderen Komplikationen behandeln müssen

Beantwortet am 29/02/2016 um 23:54
quelle vom benutzer

stimmen
0

Sie können dies ziemlich leicht mit regulären Ausdrücken. Wenn Sie nicht wissen es und planen einen Programmierer zu sein, dann lernen, es auf jeden Fall. Es wird für Sie viel Zeit in Zukunft sparen.

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();
    }

}
Beantwortet am 01/03/2016 um 02:01
quelle vom benutzer

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