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
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);
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.
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.
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.
Il y a une surcharge de String.Split pour ceci:
"THExxQUICKxxBROWNxxFOX".Split(new [] {"xx"}, StringSplitOptions.None);
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.
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");
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)!
C'est aussi facile:
string data = "THExxQUICKxxBROWNxxFOX";
string[] arr = data.Split("xx".ToCharArray(), StringSplitOptions.RemoveEmptyEntries);
A partir de .NET Core 2.0, il existe une substitution qui prend une chaîne.
Alors maintenant, vous pouvez faire "THExxQUICKxxBROWNxxFOX".Split("xx")
.