Maison >Java >javaDidacticiel >Comment remplacer efficacement plusieurs sous-chaînes en Java ?

Comment remplacer efficacement plusieurs sous-chaînes en Java ?

Patricia Arquette
Patricia Arquetteoriginal
2024-11-04 05:35:29917parcourir

How to Efficiently Replace Multiple Substrings in Java?

Remplacement efficace de plusieurs sous-chaînes en Java

Le remplacement de plusieurs sous-chaînes dans une chaîne est nécessaire à diverses fins. Bien que la méthode string.replace conventionnelle puisse suffire pour des cas simples, elle peut s'avérer insuffisante pour gérer des chaînes volumineuses ou de nombreux remplacements.

Une approche efficace pour résoudre ce problème consiste à exploiter la classe java.util.regex.Matcher . Cela nécessite un certain temps de compilation initiale, mais s'avère bénéfique pour les entrées volumineuses ou les modèles de recherche répétitifs.

Considérez le scénario suivant :

Problème : Remplacez plusieurs jetons (par exemple, " chat" et "boisson") avec leurs valeurs correspondantes (par exemple, "Garfield" et "café") dans une chaîne donnée.

Solution :

  1. Créez une carte pour stocker les jetons de substitution.
  2. Construisez une chaîne de modèle à l'aide des clés des jetons.
  3. Compilez le modèle pour créer une instance Matcher.
  4. Utilisez Matcher pour traiter la chaîne d'entrée.
  5. Ajouter les remplacements à un StringBuffer.
<code class="java">Map<String, String> tokens = new HashMap<>();
tokens.put("cat", "Garfield");
tokens.put("beverage", "coffee");

String template = "%cat% really needs some %beverage%.";

// Create pattern of the format "%(cat|beverage)%"
String patternString = "%(" + StringUtils.join(tokens.keySet(), "|") + ")%";
Pattern pattern = Pattern.compile(patternString);
Matcher matcher = pattern.matcher(template);

StringBuffer sb = new StringBuffer();
while(matcher.find()) {
    matcher.appendReplacement(sb, tokens.get(matcher.group(1)));
}
matcher.appendTail(sb);

System.out.println(sb.toString());</code>

En utilisant cette approche, le coût de compilation initial dépasse ses avantages pour les petites tailles d'entrée ou les recherches qui changent fréquemment motifs. Cependant, cela améliore considérablement l'efficacité lorsque vous travaillez avec des chaînes étendues ou de nombreux remplacements.

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