Maison >Java >javaDidacticiel >Comment diviser une chaîne par espaces, en ignorant les espaces entre guillemets ?

Comment diviser une chaîne par espaces, en ignorant les espaces entre guillemets ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-12-16 02:07:09656parcourir

How to Split a String by Spaces, Ignoring Spaces Within Quotes?

Diviser des chaînes avec des espaces non entourés de guillemets

Dans ce contexte, nous cherchons une solution pour diviser une chaîne en composants à l'aide d'espaces qui sont non entouré de guillemets simples ou doubles. Il s'agit d'une tâche nuancée qui nécessite une conception minutieuse des regex.

Une solution efficace consiste à construire une regex qui capture deux types d'éléments :

  1. Chaînes citées : Séquences de caractères entourés de guillemets simples ou doubles, sans guillemets internes.
  2. Non cité Mots : Séquences de caractères ne contenant pas d'espaces ni de guillemets.

Pour faire correspondre ces éléments, nous pouvons utiliser la regex suivante :

[^\s"']+|"([^"]*)"|'([^']*)'

Dans cette regex :

  • [^\s"'] : Correspondances non citées mots.
  • |"([^"]*)"| : correspond aux chaînes entre guillemets doubles, à l'exclusion des guillemets.
  • |'([^']*)'| : correspond aux mots simples. -chaînes entre guillemets, à l'exclusion des guillemets.

En implémentant cette solution en Java, nous pouvons utiliser les éléments suivants code :

Pattern regex = Pattern.compile("[^\s\"']+|\"([^\"]*)\"|'([^']*)'");
Matcher regexMatcher = regex.matcher(subjectString);

List<String> matchList = new ArrayList<>();
while (regexMatcher.find()) {
    if (regexMatcher.group(1) != null) {
        // Double-quoted string without quotes
        matchList.add(regexMatcher.group(1));
    } else if (regexMatcher.group(2) != null) {
        // Single-quoted string without quotes
        matchList.add(regexMatcher.group(2));
    } else {
        // Unquoted word
        matchList.add(regexMatcher.group());
    }
}

Cette approche capture habilement les deux types d'éléments, fournissant une solution robuste au problème donné.

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