Maison > Java > javaDidacticiel > Pourquoi String.split() de Java 8 gère-t-il les délimiteurs vides différemment des versions précédentes ?

Pourquoi String.split() de Java 8 gère-t-il les délimiteurs vides différemment des versions précédentes ?

Patricia Arquette
Libérer: 2024-12-12 20:26:16
original
857 Les gens l'ont consulté

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

Pourquoi dans Java 8 Split supprime parfois les chaînes vides au début du tableau de résultats ?

Dans Java 7 et versions antérieures, diviser une chaîne à l'aide un délimiteur vide ("") donnerait un tableau contenant à la fois des chaînes vides de début et de fin. Ce comportement a changé dans Java 8.

Comportement de Java 8

Dans Java 8, le fractionnement sur un délimiteur vide n'inclut plus de chaîne vide de début dans le tableau de résultats. Cependant, il supprime toujours les chaînes vides de fin. Cela est dû à un changement dans l'implémentation de String.split et Pattern.split.

Implémentation de référence

Comparaison des implémentations de référence de Pattern.split dans Java 7 et Java 8, on retrouve l'ajout suivant dans 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;
}
Copier après la connexion

Ce code exclut les correspondances de longueur nulle au début de la chaîne d'entrée du tableau de résultats.

Maintenir la compatibilité

Suivre le comportement de Java 8 (compatibilité ascendante)

Pour garantir comportement cohérent entre les versions Java, modifiez vos expressions régulières comme suit :

  1. Si le l'expression régulière peut correspondre à des chaînes de longueur nulle, ajoutez (?!A) à la fin et enveloppez l'expression régulière d'origine dans un groupe non capturant (?:...).
  2. Si l'expression régulière ne peut pas correspondre à une longueur nulle chaînes, aucune modification n'est nécessaire.
  3. En cas de doute, effectuez les deux modifications.

Après Java 7 Comportement (compatibilité descendante)

Il n'existe pas de solution générale pour la compatibilité descendante avec Java 7 ou version antérieure. Des implémentations personnalisées de split peuvent être nécessaires.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal