aujourd'hui, je me demandais s'il y avait une meilleure solution pour effectuer 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;}
}
Existe-t-il un moyen d'effectuer un trim () sans parcourir manuellement chaque élément? Je cherche quelque chose comme "divisé par les caractères suivants et découper automatiquement chaque résultat".
Ah, juste avant de poster j'ai trouvé
List<string> parts = line.Split(';').Select(p => p.Trim()).ToList();
in Comment puis-je diviser et couper une chaîne en parties sur une seule ligne?
Je suis toujours curieux: pourrait-il y avoir une meilleure solution à cela? (Ou le compilateur les convertirait-il probablement en la même sortie de code que l'opération Linq?)
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 s'il existe - peut-être un court-circuit?
bool contains = line.Split(',').Any(p => p.Trim() == match);
Si des espaces entourent juste les mots dans 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");
}
Je suggérerais d'utiliser des expressions régulières sur la chaîne d'origine, en recherchant le modèle "n'importe quel nombre d'espaces suivi par l'un de vos délimiteurs suivi par un ou plusieurs espaces" et supprimer ces espaces. Ensuite, divisez.
Essaye ça:
string keyword = " abc, foo , bar";
string match = "foo";
string[] split = Regex.Split(keyword.Trim(), @"\s*[,;]\s*");
if (split.Contains(match))
{
// do stuff
}
var parts = line.Split(';').Select(p => p.Trim()).Where(p => !string.IsNullOrWhiteSpace(p)).ToArray();
Vous allez trouver beaucoup de méthodes différentes pour ce faire et le changement de performance et la précision ne seront pas facilement apparents. Je recommanderais de les brancher tous dans une suite de tests comme NUnit afin de trouver lequel est le meilleur et lesquels sont précis.
Utilisez de petites, moyennes et grandes quantités de texte en boucles pour examiner les différentes situations.