Comment ajouter une nouvelle ligne à StringBuilder

234

J'ai un StringBuilderobjet,

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

Maintenant, je veux ajouter un caractère de nouvelle ligne au StringBuilder. Comment puis-je le faire?

result.append("/n"); 

Ne marche pas. Donc, je pensais à écrire une nouvelle ligne en utilisant Unicode. Est-ce que cela vous aidera? Si oui, comment puis-je en ajouter un?

Illep
la source
23
Je pensais que oui "\n", ou System.getProperty("line.separator").
Alvin Wong
Un retour à la ligne n'est pas nécessairement un caractère LINE FEED (LF) (Ascii / Unicode 10). Comme l'indique la bonne réponse , en Java, vous pouvez en obtenir un (LINE FEED ou un saut de ligne spécifique à la plate-forme).
Basil Bourque

Réponses:

510

Ça devrait être

r.append("\n");

Mais je vous recommande de faire comme ci-dessous,

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

System.getProperty("line.separator")vous offre une nouvelle ligne dépendante du système en java. De Java 7, il existe également une méthode qui renvoie directement la valeur:System.lineSeparator()

Jayamohan
la source
87
+1 pour le raccourci System.lineSeparator. La plus grande question est de savoir pourquoi il n'y a pas de StringBuilder#appendLine()méthode.
Patrick M
14
System.lineSeparator()la documentation mentionne "Renvoie la chaîne de séparateur de ligne dépendante du système.". Ce n'est pas indépendant de la plateforme. Utilisez ce code si vous devez écrire une chaîne qui sera utilisée par le système d'exploitation sous-jacent, sinon utilisez '\n'.
tuscland
2
@tuscland - Pourquoi ne pas simplement utiliser System.lineSeparator () tout le temps? Pourquoi '\ n' est-il une meilleure option par défaut?
RyanfaeScotland
16
Non, System.lineSeparator()doit être utilisé lorsque vous traitez avec des ressources non portables (c'est-à-dire des ressources spécifiques au système d'exploitation sous-jacent). Il a une valeur différente selon que vous exécutez Java sur Windows (\ r \ n) ou Unix (\ n). Si vous utilisez System.lineSeparator()tout le temps, vous produirez donc des fichiers non portables.
tuscland
6
Incroyable, il n'y a pas déjà de appendLinesurcharge StringBuilder.
Josh M.
22

Une autre option consiste à utiliser Apache Commons StrBuilder, qui possède les fonctionnalités qui manquent dans StringBuilder.

StrBuilder.appendLn ()

Depuis la version 3.6, StrBuilder est déconseillé au profit de TextStringBuilder qui a les mêmes fonctionnalités

Half_Duplex
la source
5
... et depuis Java 8 il y a StringJoiner , qui " est utilisé pour construire une séquence de caractères séparés par un délimiteur et commençant éventuellement par un préfixe fourni et se terminant par un suffixe fourni. " L'utilisation de "\ n" comme délimiteur entraînerait de nouveaux (sauf pour la dernière). En interne, il utilise un StringBuilder. La même approche pourrait être réalisée à l'aide de Google Guava Joiner, je suppose.
jechterhoff
1
... et maintenant c'est le cas deprecated. Veuillez utiliser org.apache.commons.text.TextStringBuilder.
Ashok MA
16

L'évasion devrait être faite avec \, non /.

Alors r.append('\n');ou ça r.append("\n");marchera ( StringBuildera surchargé les méthodes charet le Stringtype).

nhahtdh
la source
2

vous pouvez utiliser line.seperatorpour ajouter une nouvelle ligne dans

Rashida Hasan
la source
2

Je crée une classe originale similaire à StringBuidler et je peux ajouter une ligne en appelant la méthode 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();
    }
}

Usage:

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

Console:

aaaaa
bbbbb
KS
la source
1

Vous pouvez également utiliser le caractère séparateur de ligne dans String.format(Voirjava.util.Formatter ), qui est également indépendant de la plate-forme.

c'est à dire:

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

Si vous devez ajouter plus d'espaces de ligne, utilisez simplement:

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

Vous pouvez également utiliser StringFormatpour formater votre chaîne entière, avec un ou des sauts de ligne à la fin.

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

Pour Kotlin,

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

Bien qu'il s'agisse d'une question java, c'est également le premier résultat google pour kotlin, qui pourrait être utile.

Farhan Patel
la source
La question est étiquetée sous "java". Pas besoin de poster une solution qui n'est même pas pour la langue liée à la question.
chntgomez
@chntgomez J'ai cherché un moyen d'ajouter une nouvelle ligne à StringBuilder dans Kotlin et
j'ai
0

En plus de la réponse de KS de créer une classe StringBuilderPlus et d'utiliser le modèle d'adaptateur pour étendre une classe finale, si vous utilisez des génériques et renvoyez l'objet StringBuilderPlus dans les nouvelles méthodes append et appendLine, vous pouvez utiliser les StringBuilders de nombreuses méthodes d'ajout pour tous les types différents, tout en reprenant la possibilité de chaîne de chaîne plusieurs commandes d'ajout ensemble, comme indiqué ci-dessous

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

vous pouvez ensuite l'utiliser exactement comme la classe StringBuilder d'origine:

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

stringBuilder.toString();
Qualia91
la source
-2

Pour Android , utilisez ceci pour lire et écrire!

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;
    }
Abhishek Sengupta
la source
1
Ce n'est même pas une réponse à la question
chntgomez