Come faccio a formattare il testo? Giava

voti
46

Quindi, ecco il problema. Girare un file di testo nella formattazione corretta. Il punto del problema è che devo leggere un file, un file di testo, che contiene il codice in quel file di testo. Il codice in che ha la formattazione terribile. Il problema di formattazione è che quando c'è una parentesi graffa come questo {, la linea successiva non è 4 spazi a destra, è solo tutto all'estrema sinistra. Come questo:

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

Quando dovrebbe essere questo:

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

E non ci sono altre differenze tra il 2. L'unica regola è quella di fare semplicemente in modo ogni volta che c'è una parentesi graffa come questo {, per assicurarsi che la riga successiva è di 4 spazi a destra. E viceversa. Così ogni volta che c'è una parentesi graffa come questo}, nella riga successiva dovrebbe essere di 4 spazi a sinistra. Spero che voi ragazzi capire questo.

Questo è il mio problema. Ho imparato a fare un programma in cui un pezzo di testo con più spazi e le linee si trasforma in una sola riga con un singolo spazio ogni volta. Non era troppo difficile.

Per questo, però, devo tenere tutto sulla stessa linea. Quindi, se c'è 30 linee, il nuovo programma che faccio è anche 30 righe. Ho bisogno di mantenere la spaziatura molto simile, ma la semplice differenza è il tutto brace. Quindi, fondamentalmente, non mi resta che fare la linea dopo una doppietta o 4 spazi a destra, e poi fare lo stesso in modo che si trova a sinistra 4 spazi se si tratta di una }parentesi graffa.

Allora, come faccio a fare questo esattamente? Non so come risolvere solo che senza dover mettere le altre cose. E 'una cosa così semplice che devo fare; basta fare le linee dopo le parentesi di 4 spazi a destra oa sinistra, ma ho appena ho idea di cosa sintassi da usare per raggiungere questo obiettivo. Grazie!

EDIT: Questo potrebbe essere solo reso più facile. Quindi, in sostanza, tutte le linee di entrambe le estremità con una parentesi destra ricci, una parentesi graffa sinistra, o un punto e virgola. Non importa cosa. Così ogni volta che uno di questi si apre, è la fine di una riga. Quindi forse se si sa come, che rende più facile, quindi sto solo farvi sapere.

È pubblicato 29/02/2016 alle 23:04
dall'utente
In altre lingue...                            


3 risposte

voti
0

Ci sono programmi che lo farà automaticamente per voi, quindi non c'è bisogno di reinventare la ruota. Per esempio, in Eclipse, tipo: ctrl-a(Seleziona tutto) ctrl-i(auto-trattino).

Risposto il 29/02/2016 a 23:43
fonte dall'utente

voti
0

Ecco un pseudocodice si può iniziare con:

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

potrebbe essere necessario affrontare con bretelle sfuggiti e altre complicazioni se

Risposto il 29/02/2016 a 23:54
fonte dall'utente

voti
0

È possibile farlo abbastanza facilmente utilizzando le espressioni regolari. Se non lo sai e pensando di essere un programmatore, quindi sicuramente imparare. Ciò consentirà di risparmiare per un sacco di tempo in futuro.

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

}
Risposto il 01/03/2016 a 02:01
fonte dall'utente

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