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

118voto

Davy Landman Points 9010

Vous pourriez utiliser Méthode String.Split .

class ExampleClass
{
    public ExampleClass()
    {
        string exampleString = "there is a cat";
        // Split string on spaces. This will separate all the words in a string
        string[] words = exampleString.Split(' ');
        foreach (string word in words)
        {
            Console.WriteLine(word);
            // there
            // is
            // a
            // cat
        }
    }
}

Pour plus d'informations, voir Article de Sam Allen sur le fractionnement des chaînes de caractères en c# (Performance, Regex)

23voto

demongolem Points 3521

Je veux simplement souligner la puissance de la méthode Split de C# et donner une comparaison plus détaillée, en particulier de la part de quelqu'un qui vient d'un milieu Java.

Alors que StringTokenizer en Java n'autorise qu'un seul délimiteur, nous pouvons en fait diviser sur plusieurs délimiteurs, ce qui rend les expressions régulières moins nécessaires (bien que si l'on a besoin de regex, il faut les utiliser à tout prix !) Prenez par exemple ceci :

str.Split(new char[] { ' ', '.', '?' })

Ceci divise sur trois délimiteurs différents en retournant un tableau de jetons. Nous pouvons également supprimer les tableaux vides avec ce qui serait un deuxième paramètre dans l'exemple ci-dessus :

str.Split(new char[] { ' ', '.', '?' }, StringSplitOptions.RemoveEmptyEntries)

Une chose que le tokenizer de Java possède et qui manque à C# (au moins Java 7 possède cette fonctionnalité) est la possibilité de conserver le(s) délimiteur(s) en tant que tokens. Le Split de C# éliminera les tokens. Cela pourrait être important dans certaines applications NLP, par exemple, mais pour des applications plus générales, ce n'est peut-être pas un problème.

19voto

Tim Jarvis Points 12024

La méthode de division d'une chaîne est ce dont vous avez besoin. En fait, la classe tokenizer de Java est dépréciée au profit de la méthode de division des chaînes de caractères de Java.

2 votes

Selon l'AFAI, il est en effet déprécié, mais pas en faveur de l'option String#split méthode. Plus ou moins en faveur de la Scanner classe.

3voto

Steve Morgan Points 9296

Je pense que le plus proche dans le .NET Framework est

string.Split()

2voto

Pour un fractionnement complexe, vous pouvez utiliser une regex créant une collection de correspondances.

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