Java 11에서의 String trim() 메서드와 strip() 메서드의 차이
그 중에서도 JDK 11에서는 java.lang의 6가지 새로운 메서드가 도입되었습니다.문자열 클래스:
repeat(int)- 에서intlines()- 를 사용하여isBlank()이 비어 있는지 되어 있는지 . - 공백 문자만 되어 있는지 확인합니다.stripLeading()부터 합니다.stripTrailing()합니다. - 끝의 여백을 .strip()- 문자열의 시작과 끝 양쪽에서 공백을 제거합니다.
히,는strip()trim()이 기사와 같이 strip*()방법은 다음과 같이 설계되어 있습니다.
String.strip(), String.strip Leading() 및 String.stripTrailing() 메서드는 대상 String의 전면, 후면 또는 후면 중 하나에서 공백(Character.isWhiteSpace()으로 결정됨)을 잘라냅니다.
String.trim()JavaDoc © :
/**
* Returns a string whose value is this string, with any leading and trailing
* whitespace removed.
* ...
*/
위의 견적과 거의 동일합니다.
정확히 어떤 차이가 있을까요?String.trim() ★★★★★★★★★★★★★★★★★」String.strip()11월 11일단?
: 요대: :strip()' 인식trim().★★★★★★ 。trim()),<= U+0020(스페이스합니다.strip() Unicode (\0)를 삭제합니다(단, \0등 문자는 ).
문제
문자열:: Unicode 초기 Java에서 존재했던 트림
오늘날 널리 사용되는 표준으로 완전히 진화하지 않았습니다.
String::trim에서 사용되는 공간의 정의는 스페이스 코드 포인트(\u0020) 이하의 임의의 코드 포인트입니다.일반적으로 ASCII 또는 ISO 제어 문자라고 불립니다.
유니코드 인식 트리밍 루틴에서는 문자::is를 사용해야 합니다.공백(int).
또한 개발자는 특별히 들여쓰기 공백을 제거하거나 후행 공백을 제거할 수 없었습니다.
솔루션
Unicode 공백을 인식하고 선행 또는 후행만 추가로 제어할 수 있는 트리밍 방법을 소개합니다.
의 공통적인 은 '가 ''백지의 기존 과는 다르다는 것입니다.String.trim(). Bug JDK-8200373.
현재 JavaDoc for String::trim에서는 코드에서 사용되는 "space" 정의가 명확하지 않습니다.가까운 장래에 공간에 대한 다른 정의를 사용하는 추가 트리밍 방법이 출시될 예정이므로 명확화가 필수적입니다.String::trim은 스페이스 문자 코드 포인트(\u0020)보다 작거나 같은 코드 포인트로서 스페이스의 정의를 사용합니다.새로운 트리밍 방법에서는 (흰색) 공백의 정의를 Character::is에 전달될 때 true를 반환하는 코드 포인트로 사용합니다.공백 술어.
법isWhitespace(char) 추가되었습니다.Character1.하는 경우.단, 메서드 JDK 1.1은isWhitespace(int)는 소개되지 .CharacterJDK 1.5일 것)int는 보충문자를 하기 위해 가 추가 문자를 지원하기 위해 추가되었습니다."Javadoc"의 Character클래스 정의 보조 문자(일반적으로 int 기반 "코드 포인트"로 모델링됨)와 BMP 문자(일반적으로 단일 문자로 모델링됨):
U+0000 ~U+FFF 의 문자 세트는, Basic Multilinguage Plane(BMP; 기본 다국어 플레인)이라고 불리기도 합니다.코드 포인트가 U+FFFF보다 큰 문자를 보조 문자라고 합니다.Java 플랫폼은 char 배열 및 String 및 String Buffer 클래스에서 UTF-16 표현을 사용합니다.이 표현에서는 보조문자는 문자값의 쌍으로 표현됩니다.따라서 char 값은 Basic Multilinguage Plane(BMP; 기본 다국어 플레인) 코드 포인트(UTF-16 부호화의 코드 단위)를 나타냅니다.int 값은 보조 코드 포인트를 포함한 모든 Unicode 코드 포인트를 나타냅니다.문자 값만 받아들이는 메서드는 보조 문자를 지원할 수 없습니다.int 값을 받아들이는 메서드는 보조 문자를 포함한 모든 Unicode 문자를 지원합니다.
Open JDK Changeset(JDK 변경 세트)
trim() ★★★★★★★★★★★★★★★★★」strip()- Java 11에서 String.strip()이 String.trim()보다 5배 빠른 이유는 무엇입니까?
Java 11을 사용한 @MikhailKholodkov의 답변을 나타내는 유닛 테스트입니다.
(위의 점에 주의해 주십시오.\u0020되지 않습니다.trim())
public class StringTestCase {
@Test
public void testSame() {
String s = "\t abc \n";
assertEquals("abc", s.trim());
assertEquals("abc", s.strip());
}
@Test
public void testDifferent() {
Character c = '\u2000';
String s = c + "abc" + c;
assertTrue(Character.isWhitespace(c));
assertEquals(s, s.trim());
assertEquals("abc", s.strip());
}
}
일반적으로 두 메서드 모두 문자열에서 선행 및 후행 공백을 제거합니다.단, Unicode 문자 또는 다국어 기능을 사용할 경우 차이가 발생합니다.
trim()은 ASCII 값이 32 이하('U+0020' 또는 공백)인 선행 및 후행 문자를 모두 삭제합니다.
유니코드 표준에 따르면 ASCII 값이 32('U+0020') 이상인 다양한 공백 문자가 있습니다.예: 8193(U+2001)
이러한 공백 문자를 식별하기 위해 Java 1.5에서 Character 클래스에 새로운 메서드 isWhitespace(int)가 추가되었습니다.이 메서드는 유니코드를 사용하여 공백 문자를 식별합니다.유니코드 공백 문자에 대한 자세한 내용은 여기를 참조하십시오.
Java 11 용도에서 추가된 새로운 메서드 스트립 이 Character.isWhitespace(int) 메서드는 광범위한 공백 문자를 커버하고 삭제합니다.
예
public class StringTrimVsStripTest {
public static void main(String[] args) {
String string = '\u2001'+"String with space"+ '\u2001';
System.out.println("Before: \"" + string+"\"");
System.out.println("After trim: \"" + string.trim()+"\"");
System.out.println("After strip: \"" + string.strip()+"\"");
}
}
산출량
Before: " String with space "
After trim: " String with space "
After strip: "String with space"
주의: Windows 머신 상에서 동작하고 있는 경우는, Unicode 세트가 한정되어 있기 때문에, 같은 출력이 표시되지 않는 경우가 있습니다.이 코드를 테스트하기 위해 몇 가지 온라인 컴파일러를 사용해 볼 수 있습니다.
strip()와 trim()이 다른 출력을 리슬루트하는 예를 나타냅니다.
String s = "test string\u205F";
String striped = s.strip();
System.out.printf("'%s'%n", striped);//'test string'
String trimmed = s.trim();
System.out.printf("'%s'%n", trimmed);//'test string '
언급URL : https://stackoverflow.com/questions/51266582/difference-between-string-trim-and-strip-methods-in-java-11
'programing' 카테고리의 다른 글
| 왜 사람들은 여전히 자바에서 원시형을 사용하는가? (0) | 2022.07.26 |
|---|---|
| C의 구조 부재 기본값 (0) | 2022.07.26 |
| malloc과 calloc의 차이점? (0) | 2022.07.26 |
| Java 그래프 알고리즘 라이브러리가 좋습니까? (0) | 2022.07.26 |
| Nuxt는 .json 파일 데이터를 기반으로 동적 페이지를 생성합니다. (0) | 2022.07.26 |