61 votes

Effectuer un ajustement () en utilisant Split ()

aujourd'hui, je me demandais si il y a une meilleure solution exécuter l'exemple de code suivant.

string keyword = " abc, foo  ,     bar";
string match = "foo";
string[] split= keyword.Split(new char[] { ',', ';' }, StringSplitOptions.RemoveEmptyEntries);
foreach(string s in split)
{
  if(s.Trim() == match){// asjdklasd; break;}
}

Est-il un moyen pour effectuer trim() sans manuellement itérer sur chaque article? Je suis à la recherche de quelque chose comme "split par la suite de caractères et de découper automatiquement chaque résultat".

Ah, tout de suite avant de poster j'ai trouvé

List<string> parts = line.Split(';').Select(p => p.Trim()).ToList();

dans http://stackoverflow.com/questions/1728303/how-can-i-split-and-trim-a-string-into-parts-all-on-one-line

Je suis curieux de savoir: Peut-il y avoir une meilleure solution? (Ou serait le compilateur probablement de les convertir vers le même code de sortie comme le Linq-Opération?)

95voto

Marc Gravell Points 482669

Une autre option possible (qui évite LINQ, pour le meilleur ou pour le pire):

 string line = " abc, foo  ,     bar";
string[] parts= Array.ConvertAll(line.Split(','), p => p.Trim());
 

Cependant, si vous avez juste besoin de savoir si c'est là - peut-être un court-circuit?

 bool contains = line.Split(',').Any(p => p.Trim() == match);
 

4voto

Jens Granlund Points 2923

Si des espaces entourent uniquement les mots de la chaîne séparée par des virgules, cela fonctionnera:

 var keyword = " abc, foo  ,     bar";
var array = keyword.Replace(" ", "").Split(',');
if (array.Contains("foo"))
{
    Debug.Print("Match");
}
 

3voto

MikeW Points 3392

Je suggérerais d'utiliser des expressions régulières sur la chaîne d'origine, en recherchant le motif "un nombre quelconque d'espaces suivi d'un de vos délimiteurs suivi d'un ou de plusieurs espaces" et de supprimer ces espaces. Puis fendre.

3voto

Rubens Farias Points 33357

Essaye ça:

 string keyword = " abc, foo  ,     bar";
string match = "foo";
string[] split = Regex.Split(keyword.Trim(), @"\s*[,;]\s*");
if (split.Contains(match))
{
    // do stuff
}
 

1voto

McAden Points 7657

Vous allez trouver beaucoup de méthodes différentes pour le faire et le changement de performance et la précision ne seront pas immédiatement évidents. Je vous recommande de les brancher tous dans une suite de tests telle que NUnit afin de trouver celle qui ressort le mieux ET celles qui sont exactes.

Utilisez des quantités de texte petites, moyennes et grandes dans les boucles pour examiner les différentes situations.

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