Je divise une chaîne en fonction de l'espace blanc comme suit:
string myStr = "The quick brown fox jumps over the lazy dog";
char[] whitespace = new char[] { ' ', '\t' };
string[] ssizes = myStr.Split(whitespace);
Il est fastidieux de définir le tableau char [] partout dans mon code, je veux le faire. Existe-t-il un moyen plus efficace qui ne nécessite pas la création du tableau de caractères (qui est sujet à erreur s'il est copié à différents endroits)?
Réponses:
Si vous appelez simplement:
ou:
alors l'espace blanc est supposé être le caractère de division. Depuis la
string.Split(char[])
page de documentation de la méthode .Toujours, toujours, toujours lire la documentation!
la source
(char[])null
est légèrement meilleur car il évite de créer un nouvel objet. (Vous ne pouvez pas utilisernull
avec l'une desoptions
surcharges).null
, devez-vous toujours spécifier leStringSplitOption.RemoveEmptyEntries
ou sont-ils ignorés par défaut?Oui, il y a besoin d'une réponse de plus ici!
Toutes les solutions jusqu'à présent concernent le domaine plutôt limité de l' entrée canonique , à savoir: un seul caractère d'espacement entre les éléments (bien que la pointe du chapeau à @cherno pour au moins mentionner le problème). Mais je soumets que dans tous les scénarios, sauf les plus obscurs, le fractionnement de tous ces éléments devrait donner des résultats identiques:
String.Split
(dans l'une des saveurs présentées dans les autres réponses ici) ne fonctionne tout simplement pas bien, sauf si vous associez l'RemoveEmptyEntries
option à l'une de ces options:Comme le montre l'illustration, l'omission de l'option donne quatre résultats différents (étiquetés A, B, C et D) par rapport au résultat unique des quatre entrées lorsque vous utilisez
RemoveEmptyEntries
:Bien sûr, si vous n'aimez pas utiliser les options, utilisez simplement l'alternative regex :-)
la source
CapitalizeEveryWord("This is line one.\n \nThis is line three.")
.Where(s => s != string.Empty)
au Regex. Puisque vous spécifiez\s+
(n'importe quel nombre d'espaces) il ne peut y avoir d'élément vide entre les deux.Selon la documentation :
Il suffit donc d'appeler
myStr.Split();
Il n'est pas nécessaire de passer quoi que ce soit car le séparateur est unparams
tableau.la source
Pourquoi n'utilisez-vous pas?:
la source
Notez que les espaces adjacents ne seront PAS traités comme un seul délimiteur, même lors de l'utilisation
String.Split(null)
. Si l'un de vos jetons est séparé par plusieurs espaces ou tabulations, vous obtiendrez des chaînes vides retournées dans votre tableau.De la documentation:
la source
Alors ne copiez pas et ne collez pas! Extraire une fonction pour effectuer votre fractionnement et la réutiliser.
La réutilisation du code est votre ami.
la source
Pourquoi ne faites-vous pas cela:
Il semble qu'il existe une méthode
String.ToCharArray()
dans .NET 4.0!EDIT: Comme VMAtm l'a souligné, la méthode existait déjà dans .NET 2.0!
la source
vous pouvez utiliser
pour diviser la chaîne.
la source
Tu ne peux pas le faire en ligne?
Sinon, si vous faites souvent cette opération exacte, vous pouvez toujours créer une constante ou quelque chose contenant ce tableau de caractères.
Comme d'autres l'ont noté, vous pouvez également, selon la documentation, utiliser
null
ou un tableau vide. Lorsque vous faites cela, il utilise automatiquement les espaces.la source
Si la répétition du même code est le problème, écrivez une méthode d'extension sur la classe String qui encapsule la logique de fractionnement.
la source
Vous pouvez simplement faire:
MSDN a plus d'exemples et de références:
http://msdn.microsoft.com/en-us/library/b873y76a.aspx
la source