Hoe kan ik deze tekst op te maken? Java

stemmen
46

Dus hier is het probleem. Zet een tekstbestand in de juiste opmaak. Het punt van het probleem is dat ik naar een bestand, een tekstbestand, welke code in die tekst bestand te lezen. De code in die vreselijke opmaak. De opmaak probleem is dat wanneer er een accolade als deze {, de volgende regel is niet 4 ruimtes naar rechts, het is gewoon allemaal helemaal links. Zoals dit:

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

Als het dit zou moeten zijn:

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

En er is geen andere verschillen tussen de 2. De enige regel is om gewoon te maken het dus elke keer is er een accolade als deze {, om ervoor te zorgen dat de volgende regel is 4 ruimtes aan de rechterkant. En vice versa. Dus elke keer als er een accolade als deze}, moet de volgende regel worden 4 velden naar links. Ik hoop dat jullie begrijpen.

Dit is mijn probleem. Ik heb geleerd hoe je een programma waar een stuk tekst met meerdere ruimtes en lijnen wordt omgezet in een enkele lijn met een enkele ruimte elke keer te maken. Was niet al te hard.

Voor deze, hoewel, ik moet alles op dezelfde lijn te houden. Dus als er 30 lijnen, het nieuwe programma dat ik te maken is ook 30 regels. Ik moet zeer vergelijkbare afstand te houden, maar de eenvoudige verschil is de hele brace zaak. Dus eigenlijk, ik heb alleen maar om de lijn te maken na een brace ofwel 4 ruimtes naar rechts, en dan hetzelfde doen, dus het is aan de linkerkant 4 ruimtes als het een }accolade.

Dus hoe kan ik dit precies? Ik weet niet hoe om alleen vast te stellen dat het zonder verprutsen andere dingen. Het is zo'n simpel ding ik moet doen; gewoon de lijnen naar aanleiding van de beugels 4 ruimtes naar rechts of naar links, maar ik heb gewoon geen idee wat syntax te gebruiken om dit te bereiken. Bedankt!

EDIT: Dit kan zo gemakkelijker hebben gemaakt. Dus, in principe, alle lijnen ofwel eindigen met een rechter accolade, een linker accolade, of een puntkomma. Maakt niet uit wat. Dus elke keer dat een van die opduikt, het is het einde van een regel. Dus misschien als je weet hoe die het gemakkelijker maakt, dan ben ik gewoon te laten weten.

De vraag is gesteld op 29/02/2016 om 23:04
user
In andere talen...                            


3 antwoorden

stemmen
0

Er zijn programma's die dit automatisch voor u zal doen, zodat je niet nodig om het wiel opnieuw uit te vinden. Bijvoorbeeld, in Eclipse, type: ctrl-a(selecteren) ctrl-i(auto-streepje).

antwoordde op 29/02/2016 om 23:43
bron van user

stemmen
0

Hier is een pseudocode je kunt beginnen met:

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

je nodig zou kunnen hebben om te gaan met ontsnapte beugels en andere complicaties hoewel

antwoordde op 29/02/2016 om 23:54
bron van user

stemmen
0

U kunt dit doen vrij gemakkelijk met behulp van reguliere expressies. Als je het niet weet en van plan om een ​​programmeur te zijn, dan zeker leren. Het zal voor u besparen veel tijd in de toekomst.

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

}
antwoordde op 01/03/2016 om 02:01
bron van user

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