70 votes

Le C# dispose-t-il d'un tokeniseur de chaîne comme celui de Java ?

Je fais une analyse syntaxique simple d'une chaîne de caractères en entrée et j'ai besoin d'un tokenizer de chaîne de caractères. Je suis nouveau en C# mais j'ai programmé Java, et il semble naturel que le C# dispose d'un tokenizer de chaîne. Est-ce le cas ? Où se trouve-t-il ? Comment puis-je l'utiliser ?

1 votes

-1voto

Nigel Thomas Points 159

Si vous essayez de faire quelque chose comme diviser les arguments de la ligne de commande dans une application Console .NET, vous allez rencontrer des problèmes car .NET est soit cassé, soit en train d'essayer d'être intelligent (ce qui signifie qu'il est aussi bien cassé). J'avais besoin de pouvoir séparer les arguments par le caractère espace, en préservant les littéraux qui étaient cités afin qu'ils ne soient pas séparés au milieu. Voici le code que j'ai écrit pour faire ce travail :

private static List<String> Tokenise(string value, char seperator)
{
    List<string> result = new List<string>();
    value = value.Replace("  ", " ").Replace("  ", " ").Trim();
    StringBuilder sb = new StringBuilder();
    bool insideQuote = false;
    foreach(char c in value.ToCharArray())
    {
        if(c == '"')
        {
            insideQuote = !insideQuote;
        }
        if((c == seperator) && !insideQuote)
        {
            if (sb.ToString().Trim().Length > 0)
            {
                result.Add(sb.ToString().Trim());
                sb.Clear();
            }
        }
        else
        {
            sb.Append(c);
        }
    }
    if (sb.ToString().Trim().Length > 0)
    {
        result.Add(sb.ToString().Trim());
    }

    return result;
}

-2voto

Paul Shannon Points 754

Si vous utilisez C# 3.5, vous pouvez écrire une méthode d'extension à System.String qui effectue le fractionnement dont vous avez besoin. Vous pouvez alors utiliser la syntaxe :

string.SplitByMyTokens();

Plus d'informations et un exemple utile de MS ici http://msdn.microsoft.com/en-us/library/bb383977.aspx

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