> Java > java지도 시간 > Java 8의 'String.split()'이 때때로 선행 빈 문자열을 생략하는 이유는 무엇입니까?

Java 8의 'String.split()'이 때때로 선행 빈 문자열을 생략하는 이유는 무엇입니까?

DDD
풀어 주다: 2024-12-12 20:33:18
원래의
755명이 탐색했습니다.

Why Does Java 8's `String.split()` Sometimes Omit Leading Empty Strings?

Java 8에서 분할이 결과 배열 시작 부분에서 빈 문자열을 제거하는 이유는 무엇입니까?

소개:

동작 String.split()은 Java 8에서 크게 변경되었습니다. 결과 배열 시작 부분의 빈 문자열은 이제 Java 8과 다르게 처리됩니다. 이전 버전에서는. 이 변경으로 인해 올바르게 이해되지 않으면 예상치 못한 결과가 발생할 수 있습니다.

Java 7 및 이전 버전:

Java 8 이전 버전에서는 String.split()에 다음이 포함됩니다. 입력 문자열의 시작 부분에 양의 너비 일치가 있는 경우 결과 배열의 시작 부분에 있는 빈 문자열입니다. 그러나 처음에 너비가 0인 일치 항목은 포함되지 않았습니다.

Java 8 이상:

Java 8에서는 분할 논리에 추가 조건이 추가되었습니다. 이제 빈 선행 하위 문자열은 입력 문자열의 시작 부분에서 너비가 0인 일치 항목에 대한 결과 배열에 포함되지 않습니다. 이 변경의 목표는 일관성을 향상하고 빈 문자열 아티팩트를 방지하는 것입니다.

설명:

다음 예에서는 문자열 "abc"를 빈 문자열로 분할합니다. Java 7 및 8:

// Java 7
String[] tokens1 = "abc".split("");

// Java 8
String[] tokens2 = "abc".split("");
로그인 후 복사
  • Java 7: tokens1은 분할 메커니즘이 시작 부분에 빈 공간을 추가하기 때문에 ["", "a", "b", "c"]가 됩니다.
  • Java 8: tokens2는 처음에 너비가 0인 일치 항목이 다음과 같기 때문에 ["a", "b", "c"]가 됩니다. 제외됩니다.

호환성 유지:

Java 7 및 Java 8 모두와의 호환성을 유지해야 하는 경우 다음 지침을 따를 수 있습니다.

  • Java 8 및 위:

    • 정규식 끝에 (?!A)를 추가하고 0과 일치할 수 있는 경우 비캡처 그룹(?:...)으로 묶습니다. 길이 문자열.
  • Java 7 및 이전:

    • 이전 버전과의 호환성을 보장하는 일반적인 솔루션은 없습니다. Split()의 사용자 정의 구현 사용을 고려하십시오.

추가 사항:

  • 이 동작 변경은 0에만 영향을 미칩니다. width는 입력 문자열의 시작 부분과 일치합니다.
  • String.split() 및 Pattern.split().
  • split()에서 제한 인수를 0으로 지정하면 선행 또는 후행 여부에 관계없이 후행 빈 문자열이 모두 제거됩니다.

위 내용은 Java 8의 'String.split()'이 때때로 선행 빈 문자열을 생략하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿