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에서는 하나를 얻을 수 있습니다 (LINE FEED 또는 플랫폼 별 줄 바꿈).
Basil Bourque

답변:


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 2016 년

16
아니, System.lineSeparator()당신이 아닌 휴대용 자원 (기본 운영 체제이며, 자원이 특정)을 다룰 때 사용한다. Windows (\ r \ n) 또는 Unix (\ n)에서 Java를 실행하는 경우 값이 다릅니다. 항상 사용 System.lineSeparator()하면 휴대용 파일이 아닌 파일이 생성됩니다.
tuscland

6
믿을 수없는에 아직 appendLine과부하 가 없습니다 StringBuilder.
Josh M.

22

또 다른 옵션은 StringBuilder에없는 기능을 가진 Apache Commons StrBuilder를 사용하는 것입니다.

StrBuilder.appendLn ()

버전 3.6부터 StrBuilder는 동일한 기능을 가진 TextStringBuilder 를 위해 더 이상 사용되지 않습니다.


5
... 그리고 Java 8부터 StringJoiner있는데 , 이것은 " 구분자로 구분되고 선택적으로 제공된 접두사로 시작하고 제공된 접미사로 끝나는 문자 시퀀스를 구성하는 데 사용됩니다. "\ n "을 구분자로 사용하면 새로운 결과가 나타납니다. 줄 (마지막 줄 제외). 내부적으로 StringBuilder를 사용합니다. Google Guava Joiner를 사용하여 동일한 접근 방식을 실현할 수 있다고 가정합니다.
jechterhoff

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");

이것은 자바 질문이지만, 이것은 kotlin의 첫 번째 Google 결과이기도합니다.


질문은 "java"아래에 태그되어 있습니다. 질문과 관련된 언어가 아닌 솔루션을 게시 할 필요가 없습니다.
chntgomez

@chntgomez 나는 코 틀린에 모두 StringBuilder에 줄 바꿈을 추가하는 방법을 보면서이 :-) 발견
알렉산더 Poleschuk

0

KS의 StringBuilderPlus 클래스 작성 및 어댑터 클래스를 사용하여 최종 클래스 확장에 대한 응답 외에도 제네릭을 사용하고 새로운 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.