236 votes

Comment séparer une chaîne de caractères par un délimiteur à plusieurs caractères en C# ?

Que faire si je veux diviser une chaîne en utilisant un délimiteur qui est un mot ?

Par exemple, This is a sentence .

Je veux partager sur is et obtenir This y a sentence .

En Java Je peux envoyer une chaîne de caractères en tant que délimiteur, mais comment puis-je réaliser cela dans l'application C# ?

285voto

bruno conde Points 28120

http://msdn.microsoft.com/en-us/library/system.string.split.aspx

Exemple tiré de la documentation :

string source = "[stop]ONE[stop][stop]TWO[stop][stop][stop]THREE[stop][stop]";
string[] stringSeparators = new string[] {"[stop]"};
string[] result;

// ...
result = source.Split(stringSeparators, StringSplitOptions.None);

foreach (string s in result)
{
    Console.Write("'{0}' ", String.IsNullOrEmpty(s) ? "<>" : s);
}

7 votes

Cela renvoie en fait : "Th' ' ' ' une phrase" avec l'exemple donné dans la question. Peut-être est-ce ce qu'il veut réellement, mais ce n'est pas ce qu'il a spécifié.

7 votes

Ce n'est qu'un exemple... Le point est : Il y a un String.Split qui prend les chaînes de caractères comme délimiteurs.

1 votes

Oui, mais cela ne fait pas ce que la question spécifie. Vous devez utiliser quelque chose d'un peu plus astucieux pour obtenir la sortie spécifiée. Maintenant, si ce que la question spécifie est réellement ce que le demandeur veut est une question différente, mais la question posée ici ne peut pas être répondue trivialement avec juste String.Split.

55voto

IRBMe Points 2127

Vous pouvez utiliser le Regex.Split quelque chose comme ceci :

Regex regex = new Regex(@"\bis\b");
string[] substrings = regex.Split("This is a sentence");

foreach (string match in substrings)
{
   Console.WriteLine("'{0}'", match);
}

Modifier : Cela répond à l'exemple que vous avez donné. Notez qu'un String.Split se diviseront également sur le " es "à la fin du mot "This", d'où la raison pour laquelle j'ai utilisé la balise Regex et a inclus les limites des mots autour du " es ". Notez, cependant, que si vous avez écrit cet exemple par erreur, alors String.Split suffira probablement.

0 votes

@ EDIT : Je n'étais pas sûr non plus, mais vous pouvez toujours utiliser la séparation normale des chaînes de caractères et juste ajouter des espaces de chaque côté si son but est de supprimer UNIQUEMENT le mot "est".

1 votes

Cela ne fonctionne pas non plus (du moins pas sans beaucoup plus d'efforts), car vous ne pouvez pas savoir si l'espace doit aller à gauche, à droite ou aux deux sans connaître la position du mot qui a été coupé dans la chaîne.

0 votes

Cela semble trop compliqué car String.Splity permet déjà de diviser sur une chaîne...

36voto

eka808 Points 740

Sur la base des réponses existantes sur ce post, cela simplifie la mise en œuvre :)

namespace System
{
    public static class BaseTypesExtensions
    {
        /// <summary>
        /// Just a simple wrapper to simplify the process of splitting a string using another string as a separator
        /// </summary>
        /// <param name="s"></param>
        /// <param name="pattern"></param>
        /// <returns></returns>
        public static string[] Split(this string s, string separator)
        {
            return s.Split(new string[] { separator }, StringSplitOptions.None);
        }

    }
}

9 votes

+1, cela réclame une méthode d'extension. C'est presque idiot que ce ne soit pas une des surcharges intégrées.

9 votes

@ToddMenier Que voulez-vous dire par "presque" ?

29voto

ahawker Points 1761
string s = "This is a sentence.";
string[] res = s.Split(new string[]{ " is " }, StringSplitOptions.None);

for(int i=0; i<res.length; i++)
    Console.Write(res[i]);

EDIT : Le "est" est complété des deux côtés par des espaces dans le tableau afin de préserver le fait que vous êtes en train d'utiliser l'outil de gestion des données. sólo veulent que le mot "est" soit retiré de la phrase et que le mot "ceci" reste intact.

5voto

Paul Sonier Points 25528

Vous pouvez utiliser String.Replace() pour remplacer la chaîne de caractères que vous souhaitez diviser par un caractère qui n'apparaît pas dans la chaîne de caractères, puis utiliser String.Split sur ce caractère pour diviser la chaîne de caractères résultante pour obtenir le même effet.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X