Jak mohu formátovat tento text? Jáva

hlasů
46

Tak tady je ten problém. Otočit textový soubor do správné formátování. Smyslem tohoto problému je, že musím číst soubor, textový soubor, který obsahuje kód v tomto textovém souboru. Kód v tom, že má hroznou formátování. Otázkou formátování je, že když je složená závorka jako je tento {, další řádek není 4 mezery na pravé straně, je to všechno jen na zcela vlevo. Takhle:

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

Kdy by měla být tato:

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

A je tu žádné jiné rozdíly mezi 2. Jediné pravidlo je prostě, aby to tak pokaždé, když je složená závorka takhle {, aby se ujistil, další řádek je 4 místa doprava. A vice versa. Takže pokaždé, když tam je složená závorka takhle}, další řádek by měl být 4 místa doleva. Doufám, že kluci pochopili.

To je můj problém. Naučil jsem se, jak vytvořit program, kde kus textu s více mezer a linií se proměňuje v jedné linii s pokaždé jednou mezerou. Nebylo příliš těžké.

K tomu však musím udržet vše na jednom řádku. Takže pokud tam je 30 řádků, nový program, který jsem udělat, je také 30 řádků. Musím mít velmi podobné rozestupy, ale prostý rozdíl je celá výztuha věc. Takže v podstatě, já prostě muset udělat čáru po rovnátka buď 4 mezery na pravé straně, a pak to samé, takže je na levé straně 4 prostorů, jestli je to }složená závorka.

Tak jak to mám dělat přesně? Nevím, jak se právě napravit, aniž by popletl jiné věci. Je to taková jednoduchá věc, co musím udělat; jen aby řádky následující závorky 4 mezery vpravo nebo vlevo, ale já prostě nemám ponětí, co syntaxi použít k dosažení tohoto cíle. Dík!

EDIT: To by mohlo jen dělal to jednodušší. Takže v podstatě všechny řádky obou koncích s pravou složenou závorkou, s levou složenou závorkou nebo středníkem. Nezáleží na tom, co se děje. Takže pokaždé, když jeden z nich objeví, to je konec řádku. Takže možná, pokud víte, jak to usnadňuje, pak jsem jen vám vědět.

Položena 29/02/2016 v 23:04
uživatelem
V jiných jazycích...                            


3 odpovědí

hlasů
0

Existují programy, které bude automaticky udělat pro vás, takže nemusíte znovu vynalézat kolo. Například v Eclipse, typ: ctrl-a(Vybrat vše) ctrl-i(automatické odsazení).

Odpovězeno 29/02/2016 v 23:43
zdroj uživatelem

hlasů
0

Zde je pseudocode můžete začít s:

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

možná budete muset vypořádat s uprchlých šle a jiných komplikací ačkoli

Odpovězeno 29/02/2016 v 23:54
zdroj uživatelem

hlasů
0

To lze provést poměrně snadno pomocí regulárních výrazů. Pokud nechcete znát a plánuje, že programátor, pak určitě se to naučit. Ušetří pro vás spoustu času v budoucnosti.

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

}
Odpovězeno 01/03/2016 v 02:01
zdroj uživatelem

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