문자열의 시작과 끝에서 줄 바꿈을 제거하는 방법은 무엇입니까?


답변:


277

String.trim()메서드를 사용 하여 문자열의 시작과 끝에서 공백 (공백, 새 줄 등)을 제거합니다.

String trimmedString = myString.trim();

18
문제는 개행에 관한 것입니다. 이것은 줄 바꿈 이상의 것을 제거합니다
mmm

21
String.replaceAll("[\n\r]", "");

14
Bro, @JohnB 문자열 사이의 모든 새 줄 문자도 제거합니다. 요청은 선행 및 후행 개행 문자 만 제거하는 것입니다.
싯다르타

5

tl; dr

String cleanString = dirtyString.strip() ; // Call new `String::string` method.

String::strip…

이전 String::trim방법에는 공백에 대한 이상한 정의 가 있습니다.

여기 에 설명 된대로 Java 11 strip…String클래스에 새로운 메소드를 추가합니다 . 이들은 유니 코드에 정통한 공백 정의를 사용합니다. .NET 용 JavaDoc 클래스에서이 정의의 규칙을 참조하십시오 Character::isWhitespace.

예제 코드.

String input = " some Thing ";
System.out.println("before->>"+input+"<<-");
input = input.strip();
System.out.println("after->>"+input+"<<-");

또는 선행 또는 후행 공백 제거 할 수 있습니다 .

개행을 구성 하는 코드 포인트를 정확히 언급하지 않습니다 . 귀하의 개행 문자가 strip다음 대상 코드 포인트 목록에 포함될 가능성이 높습니다 .

  • 유니 코드 공백 문자 (SPACE_SEPARATOR, LINE_SEPARATOR 또는 PARAGRAPH_SEPARATOR)이지만 분리되지 않는 공백 ( '\ u00A0', '\ u2007', '\ u202F')도 아닙니다.
  • '\ t', U + 0009 HORIZONTAL TABULATION입니다.
  • '\ n', U + 000A LINE FEED입니다.
  • '\ u000B', U + 000B VERTICAL TABULATION입니다.
  • '\ f', U + 000C FORM FEED입니다.
  • '\ r', U + 000D CARRIAGE RETURN입니다.
  • '\ u001C', U + 001C FILE SEPARATOR입니다.
  • '\ u001D', U + 001D GROUP SEPARATOR입니다.
  • '\ u001E', U + 001E RECORD SEPARATOR입니다.
  • '\ u001F', U + 0

4

이 자바 코드는 "문자열 자바의 시작과 끝에서 줄 바꿈 제거"라는 질문의 제목에있는 것과 정확히 일치합니다.

String.replaceAll("^[\n\r]", "").replaceAll("[\n\r]$", "")

줄 끝에서만 줄 바꿈을 제거하십시오.

String.replaceAll("[\n\r]$", "")

줄의 시작 부분에서만 줄 바꿈을 제거하십시오.

String.replaceAll("^[\n\r]", "")

답변에 추가 컨텍스트를 제공 할 수 있습니까? 이렇게하면 모든 사람이 코드의 기능과 이유를 이해할 수 있습니다.
Mariano Zorrilla

내 대답에 설명을 추가했습니다. 이제 분명해 졌으면합니다.
Alexander Samoylov


1
String trimStartEnd = "\n TestString1 linebreak1\nlinebreak2\nlinebreak3\n TestString2 \n";
System.out.println("Original String : [" + trimStartEnd + "]");
System.out.println("-----------------------------");
System.out.println("Result String : [" + trimStartEnd.replaceAll("^(\\r\\n|[\\n\\x0B\\x0C\\r\\u0085\\u2028\\u2029])|(\\r\\n|[\\n\\x0B\\x0C\\r\\u0085\\u2028\\u2029])$", "") + "]");
  1. 문자열 시작 = ^,
  2. 문자열 끝 = $,
  3. 정규식 조합 = | ,
  4. 줄 바꿈 = \ r \ n | [\ n \ x0B \ x0C \ r \ u0085 \ u2028 \ u2029]

0

같은 질문이 있었지만 제공된 답변이 충분하지 않았기 때문에 이것에 대한 답변도 추가하겠습니다. 생각해 보면 정규 표현식으로 아주 쉽게 할 수 있다는 것을 깨달았습니다.

처음부터 줄 바꿈 을 제거하려면 :

// Trim left
String[] a = "\n\nfrom the beginning\n\n".split("^\\n+", 2);

System.out.println("-" + (a.length > 1 ? a[1] : a[0]) + "-");

그리고 문자열의 끝 :

// Trim right
String z = "\n\nfrom the end\n\n";

System.out.println("-" + z.split("\\n+$", 2)[0] + "-");

나는 이것이 문자열을 트리밍하는 가장 성능 효율적인 방법이 아니라고 확신합니다. 그러나 이러한 작업을 인라인하는 가장 깨끗하고 간단한 방법 인 것 같습니다.

간단한 정규식이므로 양쪽 끝에서 문자의 변형 및 조합을 잘라 내기 위해 동일한 방법을 수행 할 수 있습니다.


예,하지만 시작 / 끝에 몇 줄이 있는지 모를 경우 어떻게해야합니까? 귀하의 솔루션은 2 줄 바꿈은 두 경우 모두 정확하게있다 가정
루카 Govedič에게

의 두 번째 매개 변수 split()는 한계입니다. 무제한으로 일치 시키려면 끄십시오.
Zhro

0

이 시도

function replaceNewLine(str) { 
  return str.replace(/[\n\r]/g, "");
}

0

문자열 의 시작과 끝 (중간 아님 )에서 줄 바꿈 (공백, 탭 아님) 만 제거 하려면 다음 방법을 사용할 수 있습니다.

정규식을 사용하여 문자열 의 시작 ( )과 끝 ( ) 에서 캐리지 리턴 ( \\r) 및 줄 바꿈 ( \\n) 을 제거 합니다.^$

 s = s.replaceAll("(^[\\r\\n]+|[\\r\\n]+$)", "")

완전한 예 :

public class RemoveLineBreaks {
    public static void main(String[] args) {
        var s = "\nHello\nWorld\n";
        System.out.println("before: >"+s+"<");
        s = s.replaceAll("(^[\\r\\n]+|[\\r\\n]+$)", "");
        System.out.println("after: >"+s+"<");
    }
}

다음을 출력합니다.

before: >
Hello
World
<
after: >Hello
World<

-3
String text = readFileAsString("textfile.txt");
text = text.replace("\n", "").replace("\r", "");

2
이것은 질문에 올바르게 대답하지 않습니다. 시작 및 끝 부분뿐만 아니라 모든 CR 및 LF를 제거합니다.
james.garriss

이것은 시작과 끝뿐만 아니라 모든 것을 대체 할 것입니다.
Hamzeh Soboh
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.