Cómo agregar una nueva línea a StringBuilder

234

Tengo un StringBuilderobjeto

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

Ahora quiero agregar un carácter de nueva línea al StringBuilder. ¿Cómo puedo hacerlo?

result.append("/n"); 

No funciona. Entonces, estaba pensando en escribir una nueva línea usando Unicode. ¿Esto ayudará? Si es así, ¿cómo puedo agregar uno?

Illep
fuente
23
Pensé que es "\n", o System.getProperty("line.separator").
Alvin Wong el
Una nueva línea no es necesariamente un carácter de ALIMENTACIÓN DE LÍNEA (LF) (Ascii / Unicode 10). Como señala la respuesta correcta , en Java puede obtener uno (ALIMENTACIÓN DE LÍNEA o una nueva línea específica de la plataforma).
Basil Bourque

Respuestas:

510

Debería ser

r.append("\n");

Pero te recomiendo que hagas lo siguiente,

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

System.getProperty("line.separator")le ofrece una nueva línea dependiente del sistema en java. También de Java 7 hay un método que devuelve el valor directamente:System.lineSeparator()

Jayamohan
fuente
87
+1 para el acceso directo System.lineSeparator. La pregunta más importante es por qué no hay un StringBuilder#appendLine()método.
Patrick M
14
System.lineSeparator()la documentación menciona "Devuelve la cadena del separador de línea dependiente del sistema". Esto no es independiente de la plataforma. Use este código si necesita escribir una cadena que será utilizada por el sistema operativo subyacente; de ​​lo contrario, use '\n'.
Tuscland
2
@tuscland - ¿Por qué no usar System.lineSeparator () todo el tiempo? ¿Por qué es '\ n' una mejor opción por defecto?
RyanfaeScotland
16
No, System.lineSeparator()debe usarse cuando maneja recursos no portátiles (es decir, recursos específicos del sistema operativo subyacente). Tiene un valor diferente si está ejecutando Java en Windows (\ r \ n) o Unix (\ n). Si usa System.lineSeparator()todo el tiempo, por lo tanto, producirá archivos no portátiles.
Tuscland
66
Increíble aún no hay una appendLinesobrecarga StringBuilder.
Josh M.
22

Otra opción es usar Apache Commons StrBuilder, que tiene la funcionalidad que falta en StringBuilder.

StrBuilder.appendLn ()

A partir de la versión 3.6, StrBuilder ha quedado en desuso a favor de TextStringBuilder, que tiene la misma funcionalidad

Medio duplex
fuente
55
... y desde Java 8 está StringJoiner , que " se usa para construir una secuencia de caracteres separados por un delimitador y opcionalmente comenzando con un prefijo proporcionado y terminando con un sufijo proporcionado. " Usar "\ n" como delimitador daría como resultado un nuevo líneas (excepto la última). Internamente, utiliza un StringBuilder. Supongo que se podría realizar el mismo enfoque con Google Guava Joiner.
jechterhoff
1
... y ahora esto es deprecated. Por favor use org.apache.commons.text.TextStringBuilder.
Ashok MA
16

El escape debe hacerse con \, no /.

Así r.append('\n');o r.append("\n");funcionará ( StringBuilderha sobrecargado los métodos chary el Stringtipo).

nhahtdh
fuente
2

puede usar line.seperatorpara agregar una nueva línea en

Rashida Hasan
fuente
2

Creo una clase original que es similar a StringBuidler y puedo agregar línea llamando al método 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());

Consola:

aaaaa
bbbbb
Kansas
fuente
1

También puede usar el carácter separador de línea en String.format(Ver java.util.Formatter), que también es independiente de la plataforma.

es decir:

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

Si necesita agregar más espacios de línea, simplemente use:

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

También puede usar StringFormatpara formatear toda su cadena, con una (s) nueva (s) línea (s) al final.

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

Para Kotlin

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

Aunque esta es una pregunta de Java, este también es el primer resultado de Google para Kotlin, podría ser útil.

farhan patel
fuente
La pregunta está etiquetada bajo "java". No es necesario publicar una solución que ni siquiera sea para el idioma relacionado con la pregunta.
chntgomez
@chntgomez Busqué una manera de agregar una nueva línea a StringBuilder en Kotlin y encontré esto :-)
Alexander Poleschuk
0

Además de la respuesta de KS de crear una clase StringBuilderPlus y utilizar el patrón del adaptador para extender una clase final, si utiliza genéricos y devuelve el objeto StringBuilderPlus en los nuevos métodos append y appendLine, puede hacer uso de los métodos StringBuilders de muchos métodos. para todos los tipos diferentes, al tiempo que recupera la capacidad de encadenar múltiples comandos de agregación, como se muestra a continuación

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

luego puede usar esto exactamente como la clase StringBuilder original:

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

stringBuilder.toString();
Qualia91
fuente
-2

¡Para Android , use esto para leer y escribir!

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
fuente
1
Esta ni siquiera es una respuesta a la pregunta
chntgomez