>Java >java지도 시간 >Java 8의 String.split()이 이전 버전과 다르게 빈 구분 기호를 처리하는 이유는 무엇입니까?

Java 8의 String.split()이 이전 버전과 다르게 빈 구분 기호를 처리하는 이유는 무엇입니까?

Patricia Arquette
Patricia Arquette원래의
2024-12-12 20:26:16847검색

Why Does Java 8's String.split() Handle Empty Delimiters Differently Than Previous Versions?

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

Java 7 이하에서는 다음을 사용하여 문자열을 분할합니다. 빈 구분 기호("")를 사용하면 선행 및 후행 빈 문자열이 모두 포함된 배열이 생성됩니다. 이 동작은 Java 8에서 변경되었습니다.

Java 8 동작

Java 8에서 빈 구분 기호로 분할하면 더 이상 결과 배열의 선행 빈 문자열이 포함되지 않습니다. 그러나 여전히 후행 빈 문자열은 제거됩니다. 이는 String.split 및 Pattern.split 구현의 변경으로 인한 것입니다.

참조 구현

Java 7과 Pattern.split의 참조 구현 비교 Java 8에서는 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;
}

이 코드는 길이가 0인 일치 항목을 제외합니다. 결과 배열에서 입력 문자열의 시작.

호환성 유지

Java 8 동작 따르기(향후 호환성)

Java 버전 전체에서 일관된 동작을 보장하려면 정규식을 다음과 같이 수정하세요. 다음:

  1. 정규식이 길이가 0인 문자열과 일치할 수 있는 경우 끝에 (?!A)를 추가하고 원래 정규식을 비캡처 그룹(?:...)으로 묶습니다.
  2. 정규식이 길이가 0인 문자열과 일치할 수 없는 경우 수정이 필요하지 않습니다.
  3. 확실하지 않은 경우 두 가지를 모두 수행합니다.

Java 7 동작 따르기(역호환성)

Java 7 또는 이전 버전과의 역호환성을 위한 일반적인 솔루션은 없습니다. 분할을 맞춤 구현해야 할 수도 있습니다.

위 내용은 Java 8의 String.split()이 이전 버전과 다르게 빈 구분 기호를 처리하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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