4 votes

Comment diviser une chaîne de caractères par une ou plusieurs occurrences d'un caractère unique

Je possède une chaîne de caractères telle que celle-ci :

string a = "foo,,,,,,,bar, baz, qux";

Normalement, a.Split(",") serait correct pour diviser une chaîne de caractères par la virgule, mais avec la situation ci-dessus, cela entraînerait de nombreuses chaînes vides en raison des virgules.

Existe-t-il un moyen simple de diviser une chaîne de caractères par une ou plusieurs occurrences du séparateur, de sorte que le résultat ressemblerait à ["foo","bar","baz","qux"] ?

6voto

dvo Points 2048

Vous pouvez simplement utiliser StringSplitOptions pour supprimer les résultats vides.

Dans .NET Core, vous pouvez passer un caractère unique à string.Split et utiliser StringSplitOptions

var output = a.Split(',', StringSplitOptions.RemoveEmptyEntries);

Dans .NET Framework, vous devez passer le caractère unique dans un tableau de caractères (char[]) comme ceci :

var output = a.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries);

ÉDITER :

Merci à @Innat3 et @Fildor pour avoir souligné les différences entre Core et Framework.

3voto

D Stanley Points 54768

Utilisez StringSplitOptions.RemoveEmptyEntries:

var parts = a.Split(new [] {',',' '}, StringSplitOptions.RemoveEmptyEntries)

La partie malheureuse dans certaines versions de .NET est que vous devez passer un tableau de délimiteurs avec cette méthode plutôt qu'un seul délimiteur, mais la sortie est ce que vous voulez.

0voto

Krishna Muppalla Points 2783

Vous pouvez essayer LINQ

var x = a.Split(",").Select(s=>s.Trim()).Where(x => x.Length > 0);

0voto

David Hinchliffe Points 400

La méthode a.Split(",") a une surcharge qui vous permet d'exclure les éléments vides

a.Split(",", System.StringSplitOptions.RemoveEmptyEntries)

-1voto

ejmarino Points 71

Vous pouvez utiliser Linq:

chaîne a = "foo,,,,,,,bar, baz, qux";

var résultat = a.Split(',').Where(s => s.Length > 0)
var trimmedResult = result.Select(s => s.Trim())

foreach (var s in result) Console.WriteLine(s);  // "foo,bar, baz, qux"
foreach (var s in trimmedResult) Console.WriteLine(s);   // "foo,bar,baz,qux"

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