Est-ce que C # a un Tokenizer Ssortingng comme Java?

Je suis en train d’parsingr des chaînes de caractères simples et j’ai besoin d’un tokenizer de chaînes. Je suis nouveau sur C # mais j’ai programmé Java, et il semble naturel que C # ait un générateur de chaînes. Est-ce que ça? Où est-ce? Comment l’utiliser?

Vous pouvez utiliser la méthode Ssortingng.Split .

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

Pour plus d’informations, voir l’article de Sam Allen sur la séparation des chaînes dans c # (Performance, Regex)

La méthode fractionnée d’une chaîne est ce dont vous avez besoin. En fait, la classe de jeton de Java est déconseillée au profit de la méthode de partage de chaînes de Java.

Je veux juste 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 de Java.

Alors que SsortingngTokenizer en 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 vous avez besoin de regex, utilisez regex à tout prix!) Prenez par exemple ceci:

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

Cela se divise sur 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[] { ' ', '.', '?' }, SsortingngSplitOptions.RemoveEmptyEnsortinges) 

Une chose à laquelle le tokenizer de Java a, à mon avis, un manque de C # (au moins Java 7 a cette fonctionnalité) est la possibilité de conserver le (s) séparateur (s) sous forme de jetons. La division de C # rejettera les jetons. Cela pourrait être important dans certaines applications NLP, mais pour des applications plus générales, cela pourrait ne pas être un problème.

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

 ssortingng.Split ()
 _words = new List(YourText.ToLower().Trim('\n', '\r').Split(' '). Select(x => new ssortingng(x.Where(Char.IsLetter).ToArray()))); 

Ou

 _words = new List(YourText.Trim('\n', '\r').Split(' '). Select(x => new ssortingng(x.Where(Char.IsLetterOrDigit).ToArray()))); 

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

utilisez Regex.Split(ssortingng,"#|#");

lire ceci, la fonction split a une surcharge prend un tableau composé de séparateurs http://msdn.microsoft.com/en-us/library/system.ssortingngsplitoptions.aspx

La méthode similaire à celle de Java est la suivante:

 Regex.Split(ssortingng, pattern); 

  • ssortingng – le texte que vous devez diviser
  • patternpattern type chaîne, ce qui divise le texte

Si vous essayez de faire quelque chose comme le fractionnement d’arguments de ligne de commande dans une application .NET Console, vous allez avoir des problèmes car .NET est cassé ou essaie d’être intelligent (c’est-à-dire qu’il est cassé). J’avais besoin de pouvoir séparer les arguments par le caractère espace, en préservant tous les littéraux cités afin qu’ils ne soient pas divisés au milieu. C’est le code que j’ai écrit pour faire le travail:

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

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

 ssortingng.SplitByMyTokens(); 

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