Eclipse Luna: gestione automatica delle stringhe multi-linea e dell’escape dei caratteri speciali

Capita spesso di dover testare una parte di codice su una stringa di grandi dimensioni, che rappresenta magari un file di testo, una pagina html, un file csv o altro e che ne si voglia fare il copia/incolla in Eclipse per fare una prova “al volo”. Sicuramente testi di questo tipo si estendono su più linee e per importarli nell’editor di testo è necessario inserire le opportune ‘”‘ (virgolette) e gli opportuni ‘+’ per concatenare le varie righe affinchè siano assemblate in un unica stringa.
Inoltre, spesso queste stringhe multi-riga, soprattutto se rappresentano delle pagine web ma non solo, contengono dei caratteri speciali che, per essere rappresentati all’interno di una stringa in java, necessitano di essere preceduti dal carattere di escape ‘\’.
Eclipse, tramite una delle sue preference (che non si sa per quale motivo non sia abilitata di default!) permette di fare in modo che, quando copiata tra i delimitatori di una stringa java ‘”‘, una parte di testo definita su più righe venga automaticamente formattata e venga fatto automaticamente l’escape dei caratteri che lo richiedono.
Vediamo un esempio pratico: supponiamo di avere il seguente testo, distribuito su più righe e con due caratteri che richiedono l’escape, che vogliamo inserire come stringa in Eclipse per testare il nostro programma:

Questa stringa 
è composta da più righe 
e mi piacerebbe che 
facendo "copia e incolla" 
venisse formattata come 
unica stringa 
con gli opportuni +
e le opportune virgolette 
per andare a capo.

Se facciamo copia/incolla di questo testo in Eclipse con le impostazioni di default, esso ci viene copiato come normale testo, mantenendo la sua formattazione originale e sono richieste alcune operazioni per trasformare il tutto in un’unica stringa: aggiungere i delimitatori ‘”‘ ed i ‘+’ per ogni riga ed inserire il carattere di escape per i caratteri speciali interni al testo (in questo caso di nuovo le ‘”‘).
Eclipse Luna copia incolla stringa

Per velocizzare ed automatizzare il tutto possiamo ricorrere al settaggio di Eclipse di cui parlavamo prima, che troviamo sotto:

Preferences -> Java -> Editor -> Typing -> “Escape text when pasting into a string literal”

come illustrato nella figura seguente:
Eclipse auto escape strings setting

Abilitiamo l’opzione e facciamo “Apply”. A questo punto cancelliamo la stringa che avevamo inserito prima e proviamo a fare nuovamente l’incolla del testo, posizionando il cursore all’interno dei due caratteri ‘”‘ che delimitano la stringa. Questo perchè il settaggio ha effetto solo quando si incolla un testo all’interno di una String. Quindi, partendo da una situazione in cui abbiamo

String s = "";

Posizioniamo il cursore tra i due ‘”‘ e facciamo incolla.
Come possiamo vedere dalla figura sottostante, questa volta il testo ci viene automaticamente formattato in modo da renderlo un’unica stringa e i caratteri ‘”‘ interni al testo vengono automaticamente preceduti dal carattere di escape ‘\’.
Eclipse copia incolla stringa con escape automatico

2 thoughts on “Eclipse Luna: gestione automatica delle stringhe multi-linea e dell’escape dei caratteri speciali

  1. Personalmente preferisco utilizzare un file esterno di testo e caricare il file a tempo di esecuzione.

    Ciò mi evita di ricompilare il codice ogni qualvolta modifico il file di testo.

    • Qui il punto non è definire una strategia di test di un applicativo, era solo una piccola opzione di Eclipse che può tornare molto comoda in diverse occasioni. Se ad esempio devi testare un componente che deve lavorare su stringhe che riceve dall’esterno (da un altro componente magari ancora non sviluppato), mentre lo sviluppi è tipico fare delle prove su stringhe di esempio passate in modo diretto. Questa opzione fa risparmiare tutte gli interventi noiosi, necessari a rendere la stringa ben formattata per java, qualora essa contenga caratteri speciali o occupi più linee.

Leave a Reply to Davis Molinari Cancel reply

Your email address will not be published. Required fields are marked *