Question C # Diviser une chaîne par une autre chaîne


J'ai utilisé le Split() méthode pour diviser les chaînes, mais cela ne semble fonctionner que si vous divisez une chaîne par un caractère. Est-il possible de diviser un string, avec une autre chaîne étant la séparation par paramètre? J'ai essayé de convertir le séparateur en un tableau de caractères, sans chance.

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

THExxQUICKxxBROWNxxFOX

par xxet retourne un tableau avec des valeurs:

LE RENARD BRUN RAPIDE


505
2018-02-11 15:24


origine


Réponses:


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

string data = "THExxQUICKxxBROWNxxFOX";

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

911
2018-02-11 15:26



Il y a un surcharge de Split ça prend des ficelles.

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

Vous pouvez utiliser l'un de ces StringSplitOptions

  • Aucun  - La valeur de retour inclut le tableau éléments qui contiennent une chaîne vide
  • RemoveEmptyEntries - La valeur de retour n'inclut pas d'éléments de tableau qui contient une chaîne vide

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


90
2018-02-11 15:26



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 encore une fois j'ai besoin de cette lib tout le temps.


54
2018-02-11 15:26



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

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

38
2018-02-11 15:27



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);
    }
}

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

Il peut également être possible de définir de façon conditionnelle la méthode lors de l'exécution si elle n'existe pas.


17
2017-09-26 09:16



string data = "THExxQUICKxxBROWNxxFOX";

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

Choisissez simplement le caractère de remplacement avec soin (choisissez celui qui n'est pas susceptible d'être déjà présent dans la chaîne)!


5
2017-07-04 20:29



Les réponses ci-dessus sont toutes correctes. Je vais un peu plus loin et fais en sorte que C # fonctionne 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 la plus simple que j'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");

5
2018-01-30 00:16



Le moyen le plus simple est d'utiliser String.Replace:

string myString = "THExxQUICKxxBROWNxxFOX";
mystring = mystring.Replace("xx", ", ");

Ou plus simplement:

string myString = "THExxQUICKxxBROWNxxFOX".Replace("xx", ", ");

0
2018-03-26 13:04