Comptage du nombre de mots en C #
Je suis en train de compter le nombre de mots à partir d'une zone de texte enrichi en C# le code que j'ai ci-dessous ne fonctionne que si il est une seule ligne. Comment dois-je faire cela sans compter sur les regex ou toutes les autres fonctions spéciales.
string whole_text = richTextBox1.Text;
string trimmed_text = whole_text.Trim();
string[] split_text = trimmed_text.Split(' ');
int space_count = 0;
string new_text = "";
foreach(string av in split_text)
{
if (av == "")
{
space_count++;
}
else
{
new_text = new_text + av + ",";
}
}
new_text = new_text.TrimEnd(',');
split_text = new_text.Split(',');
MessageBox.Show(split_text.Length.ToString ());
source d'informationauteur Wern Ancheta
Vous devez vous connecter pour publier un commentaire.
Depuis que vous êtes uniquement intéressé par nombre de motset vous ne se soucient pas des mots, des
String.Split
pourraient être évités.String.Split
est à portée de main, mais il inutilement génère un (potentiellement) un grand nombre deString
objets, qui à son tour crée un fardeau inutile sur le garbage collector. Pour chaque mot dans votre texte, une nouvelleString
objet doit être instancié, et puis bientôt recueillies depuis que vous ne l'utilisez pas.Pour un devoir à la maison, ce n'est pas trop grave, mais si votre zone de texte contenu change souvent et de vous faire ce calcul à l'intérieur d'un gestionnaire d'événement, il peut être plus sage de simplement parcourir les caractères manuellement. Si vous voulez vraiment utiliser
String.Split
puis aller pour une version plus simple comme Yonix recommandé.Sinon, utiliser un algorithme similaire à ceci:
Ce code devrait mieux fonctionner dans le cas où vous avez plusieurs espaces entre chaque mot.
Il y a quelques meilleures façons de le faire, mais en accord avec ce que vous avez, essayez les solutions suivantes:
Maintenant faire deux boucles foreach. Un pour chaque ligne et un pour le comptage des mots dans les lignes.
C'était un téléphone de dépistage de la question de l'entrevue que j'ai juste pris (par une importante entreprise située dans CA qui vend toutes sortes de dispositifs qui commence par la lettre "i"), et je pense que je affranchis... après je me suis déconnecté, j'ai écrit cela. Je souhaite que j'étais capable de le faire au cours de l'entrevue..
Ont un look à la
Lines
des biens mentionnés dans @Jay Riggs commentaire, avec cette surcharge de Chaîne.Split pour rendre le code beaucoup plus simple. Ensuite, l'approche la plus simple serait de faire une boucle sur chaque ligne dans leLines
propriété, appelezString.Split
sur elle, et d'ajouter de la longueur du tableau il renvoie à un comte de course à pied.EDIT: Aussi, est-il une raison pour laquelle vous êtes à l'aide d'un RichTextBox au lieu d'une zone de texte avec
Multiline
ensemble deTrue
?Votre approche est sur le droit chemin. Je ferais quelque chose comme, en passant le texte de la propriété de richTextBox1 dans la méthode. Ceci, cependant, ne sera pas exacte, si votre zone de texte enrichi est mise en forme HTML, de sorte que vous aurez besoin de supprimer toutes les balises HTML avant l'exécution de nombre de mots:
Nous avons utilisé une forme adaptée de Yoshi réponse, où nous avons corrigé le bug où il ne prendrait pas en compte le dernier mot dans une chaîne de caractères si il n'y avait pas d'espace blanc après:
Cela devrait fonctionner
Vous pouvez aussi le faire de cette façon!! Ajouter cette méthode à vos méthodes d'extension.
Et de l'appeler comme ça.