Hvordan formaterer denne teksten? java

stemmer
46

Så her er problemet. Slå en tekstfil inn i riktig formatering. Poenget med problemet er at jeg må lese en fil, en tekstfil som inneholder kode i denne tekstfilen. Koden i som har forferdelig formatering. Formater problemet er at når det er en klammeparentes som dette {, er neste linje ikke 4 plasser til høyre, det er bare alle til helt til venstre. Som dette:

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

Når det skal være dette:

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

Og det er ingen andre forskjeller mellom 2. Den eneste regelen er å bare gjøre det slik at hver gang det er en klammeparentes som dette {, for å sørge for at neste linje er 4 plasser til høyre. Og vice versa. Så hver gang det er en klammeparentes som dette}, bør neste linje bli 4 plasser til venstre. Jeg håper dere forstår dette.

Dette er mitt problem. Jeg lærte å lage et program der et stykke tekst med flere mellomrom og linjer blir forvandlet til en eneste linje med et enkelt mellomrom hver gang. Var ikke så vanskelig.

For dette, men jeg må holde alt på samme linje. Så hvis det er 30 linjer, det nye programmet jeg gjør er også 30 linjer. Jeg trenger å holde svært lik avstand, men den enkle forskjellen er hele spenne ting. Så i utgangspunktet, jeg må bare gjøre linjen etter en spenne enten 4 mellomrom til høyre, og deretter gjøre det samme, så det er til venstre 4 mellomrom hvis det er en }klammeparentes.

Så hvordan gjør jeg dette nøyaktig? Jeg vet ikke hvordan de skal bare fikse det uten å rote til andre ting. Det er en så enkel ting jeg må gjøre; bare gjøre linjene følgende bukseseler 4 mellomrom til høyre eller venstre, men jeg har bare ikke hva syntaks å bruke for å oppnå dette. Takk!

EDIT: Dette kan ha bare gjort det enklere. Så, i utgangspunktet, alle linjer hver ende med en riktig klammeparentes, en venstre klammeparentes, eller et semikolon. Uansett hva. Så hver gang en av disse dukker opp, er det slutten på en linje. Så kanskje hvis du vet hvordan det gjør det lettere, så jeg bare fortelle deg.

Publisert på 29/02/2016 klokken 23:04
bruker
På andre språk...                            


3 svar

stemmer
0

Det finnes programmer som vil gjøre dette for deg automatisk, så du trenger ikke å finne opp hjulet. For eksempel, i Eclipse, type: ctrl-a(velg alle) ctrl-i(auto-strekpunkt).

Svarte 29/02/2016 kl. 23:43
kilden bruker

stemmer
0

Her er en pseudokode du kan starte med:

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

du trenger for å håndtere rømt bukseseler og andre komplikasjoner selv

Svarte 29/02/2016 kl. 23:54
kilden bruker

stemmer
0

Du kan gjøre dette ganske enkelt ved hjelp av regulære uttrykk. Hvis du ikke vet det, og planlegger å være en programmerer, så absolutt lære det. Det vil spare for deg mye tid i fremtiden.

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

}
Svarte 01/03/2016 kl. 02:01
kilden bruker

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