Cómo agregar una nueva línea a StringBuilder

4 minutos de lectura

avatar de usuario
Illep

tengo un StringBuilder objeto,

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?

  • pensé que es "\n"o System.getProperty("line.separator").

    –Alvin Wong

    26 de enero de 2013 a las 7:16


  • A nueva línea no es necesariamente un carácter de CAMBIO DE LÍNEA (LF) (Ascii/Unicode 10). Como señala la respuesta correcta, en Java puede obtener uno (CAMBIO DE LÍNEA o una nueva línea específica de la plataforma).

    – Basil Bourque

    18 de marzo de 2014 a las 3:54

avatar de usuario
Jayamohan

Debería ser

r.append("\n");

Pero te recomiendo que hagas lo siguiente,

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

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

  • +1 para el acceso directo System.lineSeparator. La gran pregunta es por qué no hay un StringBuilder#appendLine() método.

    – Patricio M.

    11/03/2015 a las 19:26

  • System.lineSeparator() la documentación menciona “Devuelve la cadena de separador de línea dependiente del sistema”. Esto no es independiente de la plataforma. Use este código si necesita escribir una cadena que usará el sistema operativo subyacente; de ​​lo contrario, use '\n'.

    – tuscland

    2 de junio de 2015 a las 7:05

  • @tuscland – ¿Por qué no usar System.lineSeparator() todo el tiempo? ¿Por qué ‘\n’ es una mejor opción por defecto?

    – Ryanfae Escocia

    3 de junio de 2015 a las 15:46


  • No, System.lineSeparator() debe usarse cuando se trata de 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 utiliza System.lineSeparator() todo el tiempo, por lo tanto, producirá archivos no portátiles.

    – tuscland

    04/06/2015 a las 16:26


  • Increíble que no haya ya un appendLine sobrecarga en StringBuilder.

    – josh m.

    21 de junio de 2018 a las 18:54

avatar de usuario
Medio duplex

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 obsoleto en favor de TextStringBuilder que tiene la misma funcionalidad

  • … y desde Java 8 hay Unión de cadenascual “se utiliza 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 nuevas líneas (excepto la última). Internamente, usa un StringBuilder. El mismo enfoque podría realizarse usando Google Guava Joiner, supongo.

    -Jechterhoff

    6 de diciembre de 2017 a las 10:48

  • … y ahora esto es deprecated. Por favor use org.apache.commons.text.TextStringBuilder.

    – Ashok MA

    24 de enero de 2019 a las 11:50

  • TextStringBuilder no está dentro commons-lang3Está dentro commons-text commons.apache.org/proper/commons-text

    – Salvatorelab

    21 de enero de 2021 a las 9:26

El escape debe hacerse con \no /.

Asi que r.append('\n'); o r.append("\n"); trabajará (StringBuilder tiene métodos sobrecargados para char y String escribe).

avatar de usuario
Kansas

Creo una clase original similar a StringBuidler y puedo agregar una 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

avatar de usuario
Rashida Hasán

puedes usar line.seperator para agregar una nueva línea en

avatar de usuario
avestruz

También puede utilizar 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 puedes usar StringFormat para formatear toda la cadena, con una(s) nueva(s) línea(s) al final.

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

avatar de usuario
Desarrollador Boc

Además de la respuesta de KS de crear una clase StringBuilderPlus y utilizar el patrón de adaptador para ampliar una clase final, si utiliza genéricos y devuelve el objeto StringBuilderPlus en los nuevos métodos append y appendLine, puede utilizar los muchos métodos append de StringBuilders para todos los tipos diferentes, al tiempo que recupera la capacidad de encadenar varios comandos adjuntos, 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
        return this;
    }

    public <T> StringBuilderPlus appendLine(T t) {
        stringBuilder.append
        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();

¿Ha sido útil esta solución?

Esta web utiliza cookies propias y de terceros para su correcto funcionamiento y para fines analíticos y para mostrarte publicidad relacionada con sus preferencias en base a un perfil elaborado a partir de tus hábitos de navegación. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos. Configurar y más información
Privacidad