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; }
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 :
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!