>Java >java지도 시간 >Java 8의 `String.split()`은 Java 7과 다르게 빈 문자열을 어떻게 처리합니까?

Java 8의 `String.split()`은 Java 7과 다르게 빈 문자열을 어떻게 처리합니까?

Patricia Arquette
Patricia Arquette원래의
2024-12-13 02:17:13900검색

How Does Java 8's `String.split()` Handle Empty Strings Differently Than Java 7?

Java 8의 String.split()에서 빈 문자열 제거

Java 8에서 String.split()의 동작은 이전 버전과 비교하여 변경되었습니다. Java 7. 특히 결과 배열의 시작 부분에서 빈 문자열을 처리하는 방식이 변경되었습니다. 수정되었습니다.

컨텍스트

Java 8 이전에는 분할()이 시작 부분에 빈 문자열이 있는 배열을 생성하고 구분 기호가 빈 문자열인 경우 끝납니다. 이러한 빈 문자열은 결국 제거되어 비어 있지 않은 문자열만 남았습니다.

Java 8 수정 사항

Java 8에서는 메커니즘이 변경되었습니다. 구분 기호가 빈 문자열인 경우, Split()은 시작 부분의 빈 문자열이 제거된 배열을 생성합니다. 그러나 이 제거는 입력 문자열 시작 부분의 너비가 0인 일치에만 적용됩니다.

설명

Java 8의 Pattern.split()에 대한 설명서에는 빈 선행 하위 문자열이 명시적으로 명시되어 있습니다. 입력 문자열의 시작 부분에 양의 너비 일치가 있는 경우에만 포함됩니다. 시작 시 일치 항목의 너비가 0인 경우 빈 선행 하위 문자열은 포함되지 않습니다.

참조 구현

Java 7과 Java 8 간의 참조 구현을 조사하면 새 조건이 고려되는 것으로 나타났습니다. 아래 코드는 추가된 로직을 보여줍니다.

if (index == 0 && index == m.start() && m.start() == m.end()) {
    // no empty leading substring included for zero-width match
    // at the beginning of the input char sequence.
    continue;
}

유지관리 호환성

Java 버전 전체에서 일관된 동작을 보장하고 Java 8과 호환되도록 하려면 다음을 고려하세요.

  • 정규 표현식이 길이가 0인 문자열과 일치할 수 있는 경우 (?!A)를 추가하세요. 비캡처 그룹(?:...)으로 래핑하면서 정규 표현식의 끝까지.
  • 정규 표현식이 길이가 0과 일치할 수 없는 경우 문자열이면 변경할 필요가 없습니다.
  • 정규식 기능이 확실하지 않은 경우 첫 번째 시나리오에서 두 작업을 모두 적용합니다.

(?!A)는 일치 항목이 다음에서 발생하지 않음을 확인합니다. 문자열의 시작 부분에서 길이가 0인 일치 항목을 효과적으로 제외합니다.

위 내용은 Java 8의 `String.split()`은 Java 7과 다르게 빈 문자열을 어떻게 처리합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.