Cum pot formata acest text? java

voturi
46

Deci , aici e problema. Rândul său , un fișier text în formatarea corectă. Punctul de problema este că trebuie să citesc un fișier, un fișier text care conține un cod în acel fișier text. Codul în care are formatarea teribil. Problema de formatare este că , atunci când există o acoladă ca aceasta {, linia următoare nu este de 4 spații în dreapta, este doar totul la foarte stânga. Asa:

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

Atunci când acest lucru ar trebui să fie:

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

Și nu există alte diferențe între 2. Singura regula este de a face pur și simplu astfel încât de fiecare dată când există o acoladă ca aceasta {, pentru a vă asigura că linia următoare este de 4 spații la dreapta. Si invers. Deci, de fiecare dată când există o acoladă ca aceasta}, linia următoare ar trebui să fie de 4 spații la stânga. Sper că voi înțelege acest lucru.

Aceasta este problema mea. Am învățat cum să facă un program în cazul în care o bucată de text cu mai multe spații și linii este transformat într-o singură linie cu un singur spațiu de fiecare dată. Nu a fost prea greu.

Pentru aceasta, însă, trebuie să păstreze totul pe aceeași linie. Deci , dacă există 30 de linii, noul program am face este , de asemenea , 30 de linii. Am nevoie pentru a menține distanța foarte asemănătoare, dar diferența de simplu este totul bretele. Deci , practic, am doar pentru a face linie după o acoladă , fie 4 spații în dreapta, și apoi face același lucru , deci este la stânga 4 locuri dacă este o }acoladă.

Deci, cum fac asta mai exact? Nu știu cum să se stabilească doar că, fără încurc alte lucruri. Este un astfel de lucru simplu trebuie să fac; face doar liniile următoare acolade 4 spații la dreapta sau la stânga, dar pur și simplu nu am nici o idee despre ce sintaxa pentru a utiliza pentru a realiza acest lucru. Mulțumiri!

EDIT: Acest lucru ar putea fi făcut doar mai ușor. Deci, practic, toate liniile, fie se termină cu o acoladă drept buclat, o acoladă, sau un semi-colon. Indiferent de situatie. Deci, de fiecare dată când unul dintre acele apare, acesta este sfârșitul unei linii. Deci, poate, dacă știi cum că face mai ușor, atunci eu sunt doar permițându-vă să știi.

Întrebat 29/02/2016 la 23:04
de către utilizator
În alte limbi...                            


3 răspunsuri

voturi
0

Există programe care vor face acest lucru pentru tine în mod automat, astfel încât să nu trebuie să reinventeze roata. De exemplu, în Eclipse, tip: ctrl-a(selectați toate) ctrl-i(auto-liniuță).

Publicat 29/02/2016 la 23:43
sursa de către utilizator

voturi
0

Iată un pseudocod puteți începe cu:

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

poate fi necesar să se ocupe cu bretele evadați și alte complicații, deși

Publicat 29/02/2016 la 23:54
sursa de către utilizator

voturi
0

Puteți face acest lucru destul de ușor, folosind expresii regulate. Dacă nu-l știu și de planificare pentru a fi un programator, apoi invata cu siguranta. Acesta va salva pentru tine o mulțime de timp în viitor.

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

}
Publicat 01/03/2016 la 02:01
sursa de către utilizator

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