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 ?
Réponses
Trop de publicités?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;
}
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
- Réponses précédentes
- Plus de réponses
1 votes
Même question : stackoverflow.com/questions/1134311/