Maison  >  Article  >  Java  >  Comment diviser des chaînes avec des délimiteurs conservés à l'aide de Java Lookahead et Lookbehind ?

Comment diviser des chaînes avec des délimiteurs conservés à l'aide de Java Lookahead et Lookbehind ?

Barbara Streisand
Barbara Streisandoriginal
2024-10-24 14:41:31370parcourir

How to Split Strings with Delimiters Preserved Using Java Lookahead and Lookbehind?

Diviser des chaînes avec des délimiteurs conservés

Lorsque vous travaillez avec des chaînes multilignes délimitées par un ensemble de délimiteurs uniques, il peut être difficile de diviser la chaîne tout en préservant les délimiteurs eux-mêmes. La méthode standard String.split sépare uniquement la chaîne en fonction du délimiteur spécifié, en supprimant les caractères délimiteurs.

Utilisation de Lookahead et Lookbehind

Le kit de développement Java (JDK) fournit une solution utilisant l'analyse anticipée et l'analyse ultérieure, qui sont des fonctionnalités d'expressions régulières qui vous permettent de faire correspondre et de capturer des caractères sans les inclure dans le résultat final.

Voici un exemple utilisant l'analyse anticipée et l'analyse ultérieure :

<code class="java">String input = "(Text1)(DelimiterA)(Text2)(DelimiterC)(Text3)(DelimiterB)(Text4)";

String[] splitWithDelimiter = input.split("((?<=;)|(?=;))");
System.out.println(Arrays.toString(splitWithDelimiter));</code>

Le modèle :

  • (?<=;) correspond à un caractère vide directement après un point-virgule (regarde derrière).
  • (?=;) correspond à un caractère vide directement avant un point-virgule (anticipation).
  • ((?<=;)|(?=;)) combiné correspond à un caractère vide après ou avant un point-virgule.

Sortie :

[Text1, ;, DelimiterA, ;, Text2, ;, DelimiterC, ;, Text3, ;, DelimiterB, ;, Text4]

Ce résultat préserve les délimiteurs avec le texte, répondant à l'exigence de garder les délimiteurs intacts lors de la division de la chaîne.

Améliorer la lisibilité

Les expressions régulières peuvent parfois être difficiles à lire et à comprendre. Pour améliorer la lisibilité, vous pouvez créer une variable avec un nom descriptif qui représente le modèle d'expression régulière. Par exemple :

<code class="java">static final String WITH_DELIMITER = "((?<=%1$s)|(?=%1$s))";

public void someMethod() {
    final String[] splitResults = input.split(String.format(WITH_DELIMITER, ";"));
}</code>

En utilisant des espaces réservés et le String.format de Java, vous pouvez rendre l'expression régulière plus intuitive et plus facile à interpréter.

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!

Déclaration:
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