166 votes

Comment diviser et découper une chaîne en plusieurs parties sur une seule ligne ?

Je souhaite scinder cette ligne :

string line = "First Name ; string ; firstName";

en un tableau de leurs versions tronquées :

"First Name"
"string"
"firstName"

Comment puis-je faire tout cela sur une seule ligne ? Ce qui suit me donne une erreur "cannot convert type void" :

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

2 votes

L'erreur est renvoyée parce que ForEach fonctionne sur l'instance actuelle de IEnumerable et renvoie void .

2voto

Vous pouvez également essayer ceci :

string[] parts = Regex.Split(line, "\\s*;\\s*");

0 votes

C'est une excellente idée, mais je crois que cela ne tient pas compte des blancs à la fin de la chaîne, n'est-ce pas ?

2voto

user2826608 Points 21

Essayez d'utiliser Regex :

List<string> parts = System.Text.RegularExpressions.Regex.Split(line, @"\s*;\s*").ToList();

0voto

foxjazzHack Points 21

Split renvoie le type string[]. Écrire une méthode d'extension :

public static string[] SplitTrim(this string data, char arg)
{
    string[] ar = data.Split(arg);
    for (int i = 0; i < ar.Length; i++)
    {
        ar[i] = ar[i].Trim();
    }
    return ar;
}

J'ai aimé votre solution et j'ai décidé de la compléter pour la rendre plus utilisable.

public static string[] SplitAndTrim(this string data, char[] arg)
{
    return SplitAndTrim(data, arg, StringSplitOptions.None);
}

public static string[] SplitAndTrim(this string data, char[] arg, 
StringSplitOptions sso)
{
    string[] ar = data.Split(arg, sso);
    for (int i = 0; i < ar.Length; i++)
        ar[i] = ar[i].Trim();
    return ar;
}

-1voto

Hung Vu Points 2379

Utiliser des expressions rationnelles

string a="bob, jon,man; francis;luke; lee bob";
            String pattern = @"[,;\s]";
            String[] elements = Regex.Split(a, pattern).Where(item=>!String.IsNullOrEmpty(item)).Select(item=>item.Trim()).ToArray();;          
            foreach (string item in elements){
                Console.WriteLine(item.Trim());

Résultat :

bob

jon

homme

francis

luke

lee

bob

Expliquer le modèle [, ; \s ] : Correspond à une occurrence du caractère , ; ou de l'espace

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