StringBuilder'a yeni satır nasıl eklenir


234

Bir StringBuildernesnem var,

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

Şimdi 'ye yeni satır karakteri eklemek istiyorum StringBuilder. Nasıl yapabilirim?

result.append("/n"); 

Çalışmıyor. Bu yüzden Unicode kullanarak yeni satır yazmayı düşünüyordum. Bu yardımcı olacak mı? Öyleyse, nasıl ekleyebilirim?


23
Düşündüm "\n", ya da System.getProperty("line.separator").
Alvin Wong

Bir yeni satır mutlaka bir LINE FEED (LF) (Ascii / Unicode 10) karakteri değildir. Doğru cevabın işaret ettiği gibi, Java'da bir tane alabilirsiniz (LINE FEED veya platforma özgü bir yeni satır).
Basil Bourque

Yanıtlar:


510

Olmalı

r.append("\n");

Ama aşağıdaki gibi yapmanızı tavsiye ederim,

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

System.getProperty("line.separator")Java'da sisteme bağlı yeni satır verir. Ayrıca Java 7'den, değeri doğrudan döndüren bir yöntem vardır:System.lineSeparator()


87
System.lineSeparator kısayolu için +1. Daha büyük soru, neden bir StringBuilder#appendLine()yöntem olmadığıdır .
Patrick M

14
System.lineSeparator()belgeler "Sisteme bağlı satır ayırıcı dizesini döndürür." Bu platformdan bağımsız değil. Temel işletim sistemi tarafından kullanılacak bir dize yazmanız gerekiyorsa bu kodu kullanın, aksi takdirde kullanın '\n'.
tuscland

2
@tuscland - Neden sürekli System.lineSeparator () kullanılmıyor? '\ N' neden varsayılan olarak daha iyi bir seçenek?
RyanfaeScotland

16
Hayır, System.lineSeparator()taşınabilir olmayan kaynaklarla (yani temel işletim sistemine özgü kaynaklar ile) uğraşırken kullanılmalıdır. Windows'da (\ r \ n) veya Unix'te (\ n) Java çalıştırıyor olsanız da farklı bir değere sahiptir. Her zaman kullanırsanız System.lineSeparator(), taşınabilir olmayan dosyalar üreteceksiniz.
Tuscland

6
İnanılmaz bir appendLineaşırı yük yok StringBuilder.
Josh

22

Başka bir seçenek, StringBuilder'de eksik olan işlevselliğe sahip Apache Commons StrBuilder kullanmaktır.

StrBuilder.appendLn ()

3.6 sürümünden itibaren StrBuilder aynı işlevselliğe sahip TextStringBuilder lehine kullanımdan kaldırılmıştır


5
... ve Java 8'den beri " sınırlayıcı ile ayrılmış ve isteğe bağlı olarak sağlanan bir önekle başlayan ve verilen bir sonekle biten bir karakter dizisi oluşturmak için kullanılan StringJoiner vardır . " \ n "nin sınırlayıcı olarak kullanılması yeni satırları (sonuncusu hariç). Dahili olarak bir StringBuilder kullanır. Aynı yaklaşım, Google Guava Joiner kullanılarak da gerçekleştirilebilir.
jechterhoff

1
... ve şimdi bu deprecated. Lütfen kullanın org.apache.commons.text.TextStringBuilder.
Ashok MA

16

Kaçış ile yapılmalıdır \, değil /.

Yani r.append('\n');ya r.append("\n");da işe yarayacak ( ve türleri StringBuilderiçin aşırı yüklenmiş yöntemler ).charString



2

StringBuidler benzer özgün sınıf oluşturmak ve yöntem appendLine (String str) çağırarak satır ekleyebilirsiniz.

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

Kullanımı:

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

Konsol:

aaaaa
bbbbb

1

Ayrıca platform agnostik olan String.format(Bkz. java.util.Formatter) 'De satır ayırıcı karakteri de kullanabilirsiniz .

yani:

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

Daha fazla satır alanı eklemeniz gerekiyorsa, şunu kullanın:

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

StringFormatDizenin tamamını, sonunda bir satırsonu olacak şekilde biçimlendirmek için de kullanabilirsiniz .

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

0

Kotlin için,

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

Bu bir java sorusu olmasına rağmen, bu aynı zamanda kotlin için ilk google sonucu, kullanışlı olabilir.


Soru "java" altında etiketlenir. Soruyla ilgili dil için bile olmayan bir çözüm yayınlamaya gerek yoktur.
chntgomez

@chntgomez Kotlin'de StringBuilder'e yeni satır eklemek için bir yol aradım ve bunu buldum :-)
Alexander Poleschuk

0

KS'nin bir StringBuilderPlus sınıfı oluşturma ve son sınıfı genişletmek için adaptör deseni kullanma yanıtına ek olarak, jeneriklerden faydalanır ve StringBuilderPlus nesnesini yeni append ve appendLine yöntemlerinde döndürürseniz, StringBuilders'ın birçok ekleme yöntemini kullanabilirsiniz Tüm farklı türler için, aşağıda gösterildiği gibi, birden çok ekleme komutunu bir araya getirme yeteneğini yeniden kazanma

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

daha sonra bunu orijinal StringBuilder sınıfı gibi kullanabilirsiniz:

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

stringBuilder.toString();

-2

Android için bunu Okuma ve Yazma için kullanın!

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
Bu soru için bile bir cevap değil
chntgomez
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.