빈 줄이 뒤 따르는 텍스트가 포함 된 문자열이 있습니다. 텍스트가있는 부분을 유지하고 끝에서 공백 줄 바꿈을 제거하는 가장 좋은 방법은 무엇입니까?
답변
String.trim()
메서드를 사용 하여 문자열의 시작과 끝에서 공백 (공백, 새 줄 등)을 제거합니다.
String trimmedString = myString.trim();
답변
String.replaceAll("[\n\r]", "");
답변
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
답변
이 자바 코드는 “문자열 자바의 시작과 끝에서 줄 바꿈 제거”라는 질문의 제목에있는 것과 정확히 일치합니다.
String.replaceAll("^[\n\r]", "").replaceAll("[\n\r]$", "")
줄 끝에서만 줄 바꿈을 제거하십시오.
String.replaceAll("[\n\r]$", "")
줄의 시작 부분에서만 줄 바꿈을 제거하십시오.
String.replaceAll("^[\n\r]", "")
답변
문자열이 잠재적 인 경우 -의 null-safe 버전 null
사용을 고려 StringUtils.trim()
하십시오 String.trim()
.
답변
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])$", "") + "]");
- 문자열 시작 = ^,
- 문자열 끝 = $,
- 정규식 조합 = | ,
- 줄 바꿈 = \ r \ n | [\ n \ x0B \ x0C \ r \ u0085 \ u2028 \ u2029]
답변
같은 질문이 있었지만 제공된 답변이 충분하지 않았기 때문에 이것에 대한 답변도 추가하겠습니다. 생각해 보면 정규 표현식으로 아주 쉽게 할 수 있다는 것을 깨달았습니다.
처음부터 줄 바꿈 을 제거하려면 :
// 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] + "-");
나는 이것이 문자열을 트리밍하는 가장 성능 효율적인 방법이 아니라고 확신합니다. 그러나 이러한 작업을 인라인하는 가장 깨끗하고 간단한 방법 인 것 같습니다.
간단한 정규식이므로 양쪽 끝에서 문자의 변형 및 조합을 잘라 내기 위해 동일한 방법을 수행 할 수 있습니다.