Je fais une analyse de saisie de chaîne simple et j'ai besoin d'un tokenizer de chaîne. Je suis nouveau en C # mais j'ai programmé Java, et il semble naturel que C # ait un tokenizer de chaîne. Le fait-il? Où est-ce? Comment est-ce que je l'utilise?
Vous pouvez 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 de chaînes en c # (Performance, Regex)
Je veux juste souligner la puissance de la méthode Split de C # et donner une comparaison plus détaillée, en particulier de quelqu'un qui vient d'un arrière-plan Java.
Alors que StringTokenizer dans Java n'autorise qu'un seul délimiteur, nous pouvons en fait diviser sur plusieurs délimiteurs, rendant les expressions régulières moins nécessaires (bien que si l'on a besoin de regex, utilisez regex par tous les moyens!) Prenez par exemple ceci:
str.Split(new char[] { ' ', '.', '?' })
Cela se divise en trois délimiteurs différents renvoyant un tableau de jetons. Nous pouvons également supprimer des tableaux vides avec ce qui serait un deuxième paramètre pour l'exemple ci-dessus:
str.Split(new char[] { ' ', '.', '?' }, StringSplitOptions.RemoveEmptyEntries)
Une chose que le tokenizer de chaîne de Java a que je pense que C # fait défaut (au moins Java 7 a cette fonctionnalité) est la capacité de garder le ou les délimiteurs en tant que jetons. Le partage de C # rejettera les jetons Cela peut être important, par exemple, pour certaines applications NLP, mais pour des applications plus générales, cela peut ne pas être un problème.
La méthode de fractionnement d'une chaîne est ce dont vous avez besoin. En fait, la classe tokenizer de Java est déconseillée au profit de la méthode de partage de chaînes de Java.
Je pense que le plus proche dans le .NET Framework est
string.Split ()
Pour un fractionnement complexe, vous pouvez utiliser une expression régulière créant une collection de correspondances.
_words = new List<string>(YourText.ToLower().Trim('\n', '\r').Split(' ').
Select(x => new string(x.Where(Char.IsLetter).ToArray())));
Ou
_words = new List<string>(YourText.Trim('\n', '\r').Split(' ').
Select(x => new string(x.Where(Char.IsLetterOrDigit).ToArray())));
utilisez Regex.Split(string,"#|#");
La méthode similaire à Java est la suivante:
Regex.Split(string, pattern);
où
string
- le texte à diviserpattern
- modèle de type chaîne, qu'est-ce qui divise le textelisez ceci, la fonction split a une surcharge prend un tableau composé de séparateurs http://msdn.Microsoft.com/en-us/library/system.stringsplitoptions.aspx