StringBuilderに改行を追加する方法


234

私はStringBuilderオブジェクトを持っています、

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

次に、改行文字をに追加しますStringBuilder。どうすればできますか?

result.append("/n"); 

動作しません。それで、ユニコードを使って改行を書くことを考えていました。これは役に立ちますか?もしそうなら、どうすれば追加できますか?


23
私はそれがあると思った"\n"、またはSystem.getProperty("line.separator")
Alvin Wong

改行は、必ずしもラインフィード(LF)(ASCII /ユニコード10)文字ではありません。正しい答えは指摘して、Javaであなたは、どちらか一方(改行またはプラットフォーム固有の改行)を取得することができます。
バジルブルク2014年

回答:


510

そのはず

r.append("\n");

しかし、私は以下のようにすることをお勧めします、

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

System.getProperty("line.separator")Javaでシステム依存の改行を提供します。また、Java 7から、値を直接返すメソッドがあります。System.lineSeparator()


87
System.lineSeparatorショートカットの+1。より大きな問題は、なぜStringBuilder#appendLine()メソッドがないのかということです。
Patrick M

14
System.lineSeparator()ドキュメントには、「システムに依存する行区切り文字列を返す」と記載されています。これはプラットフォームに依存しません。基盤となるオペレーティングシステムで使用される文字列を記述する必要がある場合は、このコードを使用してください'\n'
tuscland

2
@tuscland-なぜSystem.lineSeparator()を常に使用しないのですか?デフォルトで「\ n」がより良いオプションであるのはなぜですか?
RyanfaeScotland 2015年

16
いいえ、System.lineSeparator()移植性のないリソース(つまり、基盤となるオペレーティングシステムに固有のリソース)を扱う場合に使用する必要があります。Windows(\ r \ n)またはUnix(\ n)でJavaを実行しているかどうかは、値が異なります。System.lineSeparator()したがって、常に使用すると、移植性のないファイルが生成されます。
tuscland

6
信じられないほど、まだにappendLine過負荷はありませんStringBuilder
ジョシュM.

22

別のオプションは、StringBuilderにはない機能を備えたApache Commons StrBuilderを使用することです。

StrBuilder.appendLn()

バージョン3.6のとおりStrBuilderはの賛成で廃止されましたTextStringBuilder同じ機能を持っています


5
...そしてJava 8以降、StringJoinerがあります。これは、区切り文字で区切られ、オプションで指定された接頭辞で始まり、指定された接尾辞で終わる文字のシーケンスを構築するために使用されます。「区切り文字として「\ n」を使用すると、新しい行(最後のものを除く)。内部的には、StringBuilderを使用します。Google Guava Joinerを使用しても同じアプローチを実現できると思います。
jechterhoff 2017

1
...そして、これは今ですdeprecated。使用してくださいorg.apache.commons.text.TextStringBuilder
Ashok MA

16

エスケープは\、ではなくで行う必要があり/ます。

だから、r.append('\n');もしくはr.append("\n");動作します(StringBuilder方法オーバーロードされたcharStringタイプ)。



2

StringBuidlerに似たオリジナルのクラスを作成し、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();
    }
}

使用法:

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

コンソール:

aaaaa
bbbbb

1

String.format(を参照java.util.Formatter)で行区切り文字を使用することもできます。これもプラットフォームに依存しません。

つまり:

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

行間をさらに追加する必要がある場合は、次のように使用します。

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

を使用StringFormatして文字列全体をフォーマットし、最後に改行を追加することもできます。

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

0

コトリンの場合、

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

これはJavaの質問ですが、これはkotlinの最初のgoogle結果でもあり、役に立つかもしれません。


質問は「java」の下でタグ付けされています。質問に関連する言語でさえない解決策を投稿する必要はありません。
chntgomez

@chntgomez KotlinでStringBuilderに改行を追加する方法を探したところ、これが見つかりました:-)
Alexander Poleschuk

0

StringBuilderPlusクラスを作成し、アダプターパターンを利用して最終クラスを拡張するというKSの応答に加えて、ジェネリックを使用して新しいappendメソッドとappendLineメソッドでStringBuilderPlusオブジェクトを返す場合は、StringBuildersに多くの追加メソッドを使用できます。以下に示すように、すべての異なるタイプに対して、複数の追加コマンドを一緒に文字列化する機能を取り戻します

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

これを元のStringBuilderクラスとまったく同じように使用できます。

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

stringBuilder.toString();

-2

Androidの場合、これを読み取りと書き込みに使用します!

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
これは質問に対する答えでさえありません
chntgomez
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.