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.