Come aggiungere una nuova riga a StringBuilder


234

Ho un StringBuilderoggetto

StringBuilder result = new StringBuilder();
result.append(someChar);

Ora voglio aggiungere un carattere newline a StringBuilder. Come posso farlo?

result.append("/n"); 

Non funziona. Quindi, stavo pensando di scrivere una nuova riga usando Unicode. Questo aiuterà? In tal caso, come posso aggiungerne uno?


23
Ho pensato che lo sia "\n", o System.getProperty("line.separator").
Alvin Wong,

Una nuova riga non è necessariamente un carattere LINE FEED (LF) (Ascii / Unicode 10). Come indica la risposta corretta , in Java puoi ottenerne uno (LINE FEED o una nuova riga specifica per la piattaforma).
Basil Bourque,

Risposte:


510

Dovrebbe essere

r.append("\n");

Ma ti consiglio di fare come di seguito,

r.append(System.getProperty("line.separator"));

System.getProperty("line.separator")ti dà newline dipendente dal sistema in Java. Inoltre da Java 7 c'è un metodo che restituisce direttamente il valore:System.lineSeparator()


87
+1 per il collegamento System.lineSeparator. La domanda più grande è perché non esiste un StringBuilder#appendLine()metodo.
Patrick M,

14
System.lineSeparator()la documentazione menziona "Restituisce la stringa del separatore di linea dipendente dal sistema.". Questo non è indipendente dalla piattaforma. Utilizzare questo codice se è necessario scrivere una stringa che verrà utilizzata dal sistema operativo sottostante, altrimenti utilizzare '\n'.
toscana,

2
@tuscland - Perché non usare System.lineSeparator () continuamente? Perché '\ n' è un'opzione migliore di default?
RyanfaeScotland,

16
No, System.lineSeparator()dovrebbe essere utilizzato quando si ha a che fare con risorse non portatili (ovvero risorse specifiche del sistema operativo sottostante). Ha un valore diverso se si esegue Java su Windows (\ r \ n) o Unix (\ n). Se lo usi System.lineSeparator()tutto il tempo, produrrai quindi file non portatili.
toscana,

6
Incredibile non c'è già un appendLinesovraccarico StringBuilder.
Josh M.,

22

Un'altra opzione è quella di utilizzare Apache Commons StrBuilder, che ha le funzionalità che mancano in StringBuilder.

StrBuilder.appendLn ()

A partire dalla versione 3.6 StrBuilder è stato deprecato a favore di TextStringBuilder che ha la stessa funzionalità


5
... e poiché Java 8 c'è StringJoiner , che " è usato per costruire una sequenza di caratteri separati da un delimitatore e opzionalmente iniziare con un prefisso fornito e terminare con un suffisso fornito. " L'uso di "\ n" come delimitatore comporterebbe un nuovo linee (tranne l'ultima). Internamente, utilizza StringBuilder. Lo stesso approccio potrebbe essere realizzato utilizzando Google Guava Joiner, presumo.
Jechterhoff,

1
... e ora questo è deprecated. Si prega di utilizzare org.apache.commons.text.TextStringBuilder.
Ashok MA,

16

La fuga dovrebbe essere fatta con \, no /.

Così r.append('\n');o r.append("\n");funzionerà ( StringBuilderha metodi chare Stringtipi sovraccarichi ).



2

Creo una classe originale simile a StringBuidler e posso aggiungere la linea chiamando il metodo appendLine (String str).

public class StringBuilderPlus {

    private StringBuilder sb;

    public StringBuilderPlus(){
         sb = new StringBuilder();
    }

    public void append(String str)
    {
        sb.append(str != null ? str : "");
    }

    public void appendLine(String str)
    {
        sb.append(str != null ? str : "").append(System.getProperty("line.separator"));
    }

    public String toString()
    {
        return sb.toString();
    }
}

Uso:

StringBuilderPlus sb = new StringBuilderPlus();
sb.appendLine("aaaaa");
sb.appendLine("bbbbb");
System.out.println(sb.toString());

Console:

aaaaa
bbbbb

1

Puoi anche usare il carattere separatore di riga in String.format(Vedi java.util.Formatter), che è anche indipendente dalla piattaforma.

vale a dire:

result.append(String.format("%n", ""));

Se è necessario aggiungere più spazi di linea, basta usare:

result.append(String.format("%n%n", ""));

Puoi anche usare StringFormatper formattare l'intera stringa, con una o più righe alla fine.

result.append(String.format("%10s%n%n", "This is my string."));

0

Per Kotlin,

StringBuilder().appendln("your text");

Anche se questa è una domanda Java, questo è anche il primo risultato di Google per Kotlin, potrebbe tornare utile.


La domanda è taggata sotto "java". Non è necessario pubblicare una soluzione che non sia nemmeno per la lingua correlata alla domanda.
chntgomez,

@chntgomez Ho cercato un modo per aggiungere una nuova riga a StringBuilder a Kotlin e ho trovato questo :-)
Alexander Poleschuk,

0

Oltre alla risposta di KS di creare una classe StringBuilderPlus e di utilizzare il relativo modello di adattatore per estendere una classe finale, se si utilizzano generici e si restituisce l'oggetto StringBuilderPlus nei nuovi metodi append e appendLine, è possibile utilizzare molti metodi di aggiunta StringBuilders per tutti i diversi tipi, mentre si riacquista la possibilità di mettere insieme più comandi di accodamento, come mostrato di seguito

public class StringBuilderPlus {

    private final StringBuilder stringBuilder;

    public StringBuilderPlus() {
        this.stringBuilder = new StringBuilder();
    }

    public <T> StringBuilderPlus append(T t) {
        stringBuilder.append(t);
        return this;
    }

    public <T> StringBuilderPlus appendLine(T t) {
        stringBuilder.append(t).append(System.lineSeparator());
        return this;
    }

    @Override
    public String toString() {
        return stringBuilder.toString();
    }

    public StringBuilder getStringBuilder() {
        return stringBuilder;
    }
}

puoi quindi usarlo esattamente come la classe StringBuilder originale:

StringBuilderPlus stringBuilder = new StringBuilderPlus();
stringBuilder.appendLine("test")
    .appendLine('c')
    .appendLine(1)
    .appendLine(1.2)
    .appendLine(1L);

stringBuilder.toString();

-2

Per Android , usa questo per leggere e scrivere!

private void writeToFile(String message) {
        try {
            OutputStream outputStream = openFileOutput("todoList.txt",Context.MODE_PRIVATE);
            OutputStreamWriter outputStreamWriter = new OutputStreamWriter(outputStream);
            outputStreamWriter.write(message);
            outputStreamWriter.close();

        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    private String readFromFile() throws IOException {

        String result = "";
        InputStream inputStream = openFileInput("todoList.txt");

        if (inputStream != null) {
            InputStreamReader inputStreamReader = new InputStreamReader(inputStream);
            BufferedReader bufferedReader = new BufferedReader(inputStreamReader);
            String tempString = "";
            StringBuilder stringBuilder = new StringBuilder();

            while ( (tempString = bufferedReader.readLine()) != null ) {

                stringBuilder.append(tempString);
                stringBuilder.append("\n");
            }
            inputStream.close();
            result = stringBuilder.toString();
        }
        return result;
    }

1
Questa non è nemmeno una risposta alla domanda
chntgomez,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.