Como acrescentar uma nova linha ao StringBuilder


234

Eu tenho um StringBuilderobjeto

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

Agora eu quero acrescentar um caractere de nova linha ao StringBuilder. Como eu posso fazer isso?

result.append("/n"); 

Não funciona. Então, eu estava pensando em escrever uma nova linha usando Unicode. Isso vai ajudar? Se sim, como posso adicionar um?


23
Eu pensei que é "\n", ou System.getProperty("line.separator").
— Alvin Wong

Uma nova linha não é necessariamente um caractere LINE FEED (LF) (Ascii / Unicode 10). Como a resposta correta indica, em Java você pode obter um (LINE FEED ou uma nova linha específica da plataforma).
— Basil Bourque

Respostas:


510

Deveria ser

r.append("\n");

Mas eu recomendo que você faça o seguinte,

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

System.getProperty("line.separator")fornece uma nova linha dependente do sistema em java. Também do Java 7, há um método que retorna o valor diretamente:System.lineSeparator()


87
+1 para o atalho System.lineSeparator. A questão maior é por que não existe um StringBuilder#appendLine()método.
— 226 Patrick M

14
System.lineSeparator()a documentação menciona "Retorna a cadeia separadora de linhas dependente do sistema.". Isso não é independente de plataforma. Use esse código se precisar escrever uma sequência que será usada pelo sistema operacional subjacente, caso contrário, use '\n'.
— tuscland

2
@ tuscland - Por que não usar System.lineSeparator () o tempo todo? Por que '\ n' é uma opção melhor como padrão?
— RyanfaeScotland

16
Não, System.lineSeparator()deve ser usado quando você lida com recursos não portáteis (ou seja, recursos específicos do sistema operacional subjacente). Ele tem um valor diferente se você estiver executando o Java no Windows (\ r \ n) ou Unix (\ n). Se você usar System.lineSeparator()o tempo todo, produzirá arquivos não portáveis.
— tuscland

6
Inacreditável, ainda não há uma appendLinesobrecarga StringBuilder.
— 21718 Josh M.

22

Outra opção é usar o Apache Commons StrBuilder, que possui a funcionalidade que falta no StringBuilder.

StrBuilder.appendLn ()

A partir da versão 3.6, o StrBuilder foi descontinuado em favor do TextStringBuilder, que tem a mesma funcionalidade


5
... e desde o Java 8, há StringJoiner , que " é usado para construir uma sequência de caracteres separados por um delimitador e, opcionalmente, começando com um prefixo fornecido e terminando com um sufixo fornecido. " Usar "\ n" como delimitador resultaria em novos linhas (exceto a última). Internamente, ele usa um StringBuilder. A mesma abordagem poderia ser realizada usando o Google Guava Joiner, presumo.
— jechterhoff

1
... e agora é isso deprecated. Por favor use org.apache.commons.text.TextStringBuilder.
— Ashok MA

16

A fuga deve ser feita com \, não /.

Então, r.append('\n');ou r.append("\n");funcionará ( StringBuildersobrecarregou os métodos chare o Stringtipo).



2

Crio uma classe original semelhante à StringBuidler e pode acrescentar uma linha chamando o 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());

Console:

aaaaa
bbbbb

1

Você também pode usar o caractere separador de linhas em String.format(Consulte java.util.Formatter), que também é independente de plataforma.

ou seja:

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

Se você precisar adicionar mais espaços de linha, use:

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

Você também pode usar StringFormatpara formatar toda a sequência, com uma nova linha (s) no final.

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

0

Para Kotlin,

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

Embora esta seja uma pergunta sobre Java, este também é o primeiro resultado do google para o kotlin, que pode ser útil.


A pergunta está marcada com "java". Não há necessidade de postar uma solução que nem seja para o idioma relacionado à pergunta.
— chntgomez

@chntgomez procurei uma forma de acrescentar uma nova linha de StringBuilder em Kotlin e encontrei este :-)
— Alexander Poleschuk

0

Além da resposta da KS de criar uma classe StringBuilderPlus e utilizar o padrão do adaptador para estender uma classe final, se você usar genéricos e retornar o objeto StringBuilderPlus nos novos métodos append e appendLine, poderá usar os vários métodos append StringBuilders para todos os tipos diferentes, enquanto recupera a capacidade de encadear vários comandos de acréscimo juntos, conforme mostrado abaixo

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

você pode usar isso exatamente como a classe StringBuilder original:

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

stringBuilder.toString();

-2

Para Android , use isso para ler e escrever!

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
Isso não é nem uma resposta para a pergunta
— chntgomez
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.