web-dev-qa-db-fra.com

Fractionner une chaîne par une autre chaîne en C #

J'utilise la méthode Split() pour scinder les chaînes, mais cela ne semble fonctionner que si vous scindez une chaîne par un caractère. Est-il possible de scinder une string, avec une autre chaîne étant la scission par paramètre?

J'ai essayé de convertir le séparateur en un tableau de caractères, sans succès.

En d'autres termes, j'aimerais diviser la string:

THExxQUICKxxBROWNxxFOX

par xx, et retourne un tableau avec les valeurs:

LE RENARD BRUN RAPIDE

614
Brandon

Pour scinder par une chaîne, vous devez utiliser le surcharge du tableau de chaînes .

string data = "THExxQUICKxxBROWNxxFOX";

return data.Split(new string[] { "xx" }, StringSplitOptions.None);
1118
Adam Robinson

Il y a un surcharge de Split qui prend des chaînes.

"THExxQUICKxxBROWNxxFOX".Split(new [] { "xx" }, StringSplitOptions.None);

Vous pouvez utiliser l'une ou l'autre de ces StringSplitOptions.

  • Aucun - La valeur de retour comprend des éléments de tableau contenant une chaîne vide.
  • RemoveEmptyEntries - La valeur de retour ne comprend pas les éléments de tableau contenant une chaîne vide.

Donc, si la chaîne est "THExxQUICKxxxxBROWNxxFOX", StringSplitOptions.None renverra une entrée vide dans le tableau pour la partie "xxxx" alors que StringSplitOptions.RemoveEmptyEntries ne le fera pas.

111
Greg
Regex.Split(string, "xx")

est la façon dont je le fais habituellement. Bien sûr vous aurez besoin d'un

using System.Text.RegularExpressions;

mais là encore j'ai besoin de cette bibliothèque tout le temps.

65
Peter

Il y a une surcharge de String.Split pour ceci:

"THExxQUICKxxBROWNxxFOX".Split(new [] {"xx"}, StringSplitOptions.None);
43
bruno conde

J'aime généralement utiliser ma propre extension pour cela:

string data = "THExxQUICKxxBROWNxxFOX";
var dataspt = data.Split("xx");
//>THE  QUICK  BROWN  FOX 


//the extension class must be declared as static
public static class StringExtension
{   
    public static string[] Split(this string str, string splitter)
    {
        return str.Split(new[] { splitter }, StringSplitOptions.None);
    }
}

Toutefois, cela entraînera une exception si Microsoft décide d'inclure cette surcharge de méthode dans les versions ultérieures. C’est aussi la raison probable pour laquelle Microsoft n’a pas inclus cette méthode entre-temps: au moins une entreprise pour laquelle je travaillais a utilisé une telle extension dans tous ses projets C #.

Il peut également être possible de définir de manière conditionnelle la méthode au moment de l'exécution si elle n'existe pas.

21
Lorenz Lo Sauer

Les réponses précédentes sont toutes correctes. Je vais un peu plus loin et fais travailler C # pour moi en définissant une méthode d'extension sur String:

public static string[] Split(this string toSplit, string splitOn) {
    return toSplit.Split(new string[] { splitOn }, StringSplitOptions.None);
}

De cette façon, je peux l'appeler sur n'importe quelle chaîne de la manière simple à laquelle je m'attendais naïvement la première fois que j'essayais d'accomplir ceci:

"a big long string with stuff to split on".Split("g str");
7
argyle
string data = "THExxQUICKxxBROWNxxFOX";

return data.Replace("xx","|").Split('|');

Il suffit de choisir avec soin le caractère de remplacement (choisissez-en un qui ne soit pas susceptible d'être présent dans la chaîne)!

6
SNag

C'est aussi facile:

string data = "THExxQUICKxxBROWNxxFOX";
string[] arr = data.Split("xx".ToCharArray(), StringSplitOptions.RemoveEmptyEntries);
1
user890255

A partir de .NET Core 2.0, il existe une substitution qui prend une chaîne.

Alors maintenant, vous pouvez faire "THExxQUICKxxBROWNxxFOX".Split("xx").

Voir https://docs.Microsoft.com/en-us/dotnet/api/system.string.split?view=netcore-2.0#System_String_Split_System_Strem_System_StringSplitOptions_

0
Danation