Hogyan formázza a szöveget? Jáva

szavazat
46

Tehát itt van a probléma. Forduljon egy szöveges fájlt a megfelelő formázást. A lényeg az a probléma, hogy azt kell olvasni egy fájlt, egy szöveges fájl, amely kódot, hogy a szöveges fájlt. A kód, amely szörnyű formázást. A formázás kérdés az, hogy ha van egy zárójel, mint ez {, a következő sorban nem 4 mezőt jobbra, csak mindenki nagyon maradt. Mint ez:

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

Amikor legyen ez:

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

És nincs más különbség a 2. Az egyetlen szabály az, hogy egyszerűen, hogy ez így minden alkalommal van egy zárójel, mint ez {, hogy ellenőrizze, hogy a következő sor 4 mezőt jobbra. És fordítva. Tehát minden alkalommal van egy zárójel, mint ez}, akkor a következő sort kell 4 mezőt a bal oldalon. Remélem nektek megérteni ezt.

Ez az én problémám. Megtanultam, hogyan kell egy program, ahol a szöveg egy részét több terek és vonalak vált egy sorban egy szóköz minden alkalommal. Nem volt túl nehéz.

Ehhez azonban azt kell, hogy minden ugyanazon a vonalon. Szóval, ha van 30 sor, az új program teszek is 30 sor. Meg kell tartani nagyon hasonló távolságtartó, de az egyszerű különbség az egész melles dolog. Tehát alapvetően, én csak azt, hogy a vonal után egy zárójel vagy 4 mezőt jobbra, majd ugyanezt így a bal oldali 4 terek, ha ez egy }zárójel.

Tehát hogyan csináljak ez pontosan? Nem tudom, hogyan kell csak rögzíteni, hogy tönkretétele nélkül más dolog. Ez egy ilyen egyszerű dolog, amit meg kell tennie; csak hogy a sorokat a nadrágtartó 4 mezőt jobbra vagy balra, de én csak fogalmam sincs, mit szintaxis elérni ezt. Kösz!

EDIT: Ez talán most tette könnyebbé. Tehát alapvetően, minden vonal mindkét végén egy jobb zárójel, egy bal kapcsos zárójel, vagy pontosvessző. Bármi történjék. Tehát minden alkalommal egy ilyen felugrik ez a sor végén. Tehát lehet, hogy ha tudod, hogy könnyebbé teszi, akkor én csak hogy tudd.

A kérdést 29/02/2016 23:04
felhasználó
Más nyelveken...                            


3 válasz

szavazat
0

Vannak olyan programok, amelyek ezt az Ön számára automatikusan, így nem kell újra feltalálni a kereket. Például, az Eclipse-ben, típusa: ctrl-a(jelölje ki az összes) ctrl-i(auto-francia).

Válaszolt 29/02/2016 23:43
a forrás felhasználó

szavazat
0

Itt egy pszeudokódokra kezdheti:

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

szükség lehet foglalkozni megszökött zárójelek és egyéb szövődmények bár

Válaszolt 29/02/2016 23:54
a forrás felhasználó

szavazat
0

Megteheti ezt elég könnyen reguláris kifejezések segítségével. Ha nem tudod, és tervezi, hogy egy programozó, akkor biztosan tanulni. Ez fogja megmenteni az Ön számára sok időt a jövőben.

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

}
Válaszolt 01/03/2016 02:01
a forrás felhasználó

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