Diviser des chaînes avec des délimiteurs conservés
Lorsque vous travaillez avec des chaînes multilignes, il devient souvent nécessaire de les diviser en leurs composants à l'aide de délimiteurs. Cependant, le comportement par défaut de String.split() supprime les délimiteurs, ne laissant que le texte extrait.
Problème :
Considérez la chaîne suivante :
(Text1)(DelimiterA)(Text2)(DelimiterC)(Text3)(DelimiterB)(Text4)
Diviser cette chaîne à l'aide de String.split() donne :
Résultat souhaité :
Pour conserver les délimiteurs et diviser la chaîne en conséquence, nous avons besoin d'une approche qui préserve les délimiteurs.
Solution :
Le JDK fournit un moyen d'y parvenir en utilisant les fonctionnalités d'expression régulière (regex) d'anticipation et d'anticipation. Voici comment cela fonctionne :
<code class="java">System.out.println(Arrays.toString("a;b;c;d".split("(?<=;)"))); System.out.println(Arrays.toString("a;b;c;d".split("(?=;)"))); System.out.println(Arrays.toString("a;b;c;d".split("((?<;=;)|(?=;))")));</code>
Il en résulte le résultat suivant :
La dernière sortie s'aligne sur le format souhaité, où chaque délimiteur est conservé et la chaîne est divisée en parties distinctes.
Explication Regex :
En combinant ces modèles, nous divisons efficacement la chaîne à chaque délimiteur tout en préservant le délimiteur lui-même dans le cadre de la sortie.
Améliorations de la lisibilité :
Pour une meilleure lisibilité, envisagez d'utiliser des expressions régulières nommées comme suit :
<code class="java">static public final String WITH_DELIMITER = "((?<=%1$s)|(?=%1$s))"; public void someMethod() { final String[] aEach = "a;b;c;d".split(String.format(WITH_DELIMITER, ";")); ... }</code>
Cela rend l'expression régulière plus explicite et plus facile à maintenir.
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!