Laden...

string.Trim() arbeitet nicht wie erwartet / Zählen, wieviele verschiedene Zeichen ein String enthält

Erstellt von _Bugrick_ vor 12 Jahren Letzter Beitrag vor 12 Jahren 1.241 Views
Thema geschlossen
_
_Bugrick_ Themenstarter:in
48 Beiträge seit 2011
vor 12 Jahren
string.Trim() arbeitet nicht wie erwartet / Zählen, wieviele verschiedene Zeichen ein String enthält

Hallo,

wie ich feststellen durfte gibt es keine vorgefertigte Funktion, die zählt wie viele verschiedene Zeichen ein String enthält. Also fix eine runtergetippt:

private int GetNumberOfVariousChars(string strValue)
{
   int intCount;

   for (intCount = 0; strValue.Length > 0; intCount++)
   {
      strValue = strValue.Trim(strValue[0]);
   }

   return intCount;
}

Soweit, so gut. Beim Debuggen durfte ich nun festellen, dass Trim manchmal nicht korrekt vorgeht. Beispiel: Beim Wort "nennen" sollte die Funktion "2" zurückgeben. Jedoch gibt sie "3" zurück, da zuerst das erste "n" getrimmt wird, anschließend die beiden "e" und "n". Das selbe ist beim Wort "elefant" der Fall.

Nutz ich die Funktion falsch oder wie?

Danke schonmal.

5.657 Beiträge seit 2006
vor 12 Jahren

Nutz ich die Funktion falsch oder wie?

Auf jeden Fall. Die Trim-Funktion entfernt Zeichen, aber zählt nicht, wieviele unterschiedliche Zeichen in einem String sind. Auch mit deiner Schleife ergibt es keinen Sinn für mich.

Christian

Weeks of programming can save you hours of planning

_
_Bugrick_ Themenstarter:in
48 Beiträge seit 2011
vor 12 Jahren

Ich ging davon aus, dass die Trim-Funktion aufeinmal alle gleichen Zeichen entfernt (sollte sie ja, oder?). Und die Anzahl der Durchgänge die die for-Schleife braucht, ist die Anzahl der verschiedenen Buchstaben.

2.207 Beiträge seit 2011
vor 12 Jahren

Hallo Bugrick,

die Methode arbeitet nicht falsch. in der MSDN steht ausdrücklich

Zitat von: MSDN (String.Trim-Methode)
Entfernt sämtliche Zeichen aus einer angegebenen Menge von Zeichen am **Anfang **und am **Ende **dieser Instanz.

Du müsstest also noch über deinen string laufen und mit "Contains" und dem Index das Zeichen löschen und deinen Zähler inkrementieren.

Gruss Coffeebean

1.552 Beiträge seit 2010
vor 12 Jahren

Hallo Burgrick,

Warum verwendest du nicht die Linq-Extension Distinct?


var v = "HALLLLLO".Distinct().ToList();

v beinhaltet dan die chars 'H','A','L','O'
Gruß
Michael

Mein Blog
Meine WPF-Druckbibliothek: auf Wordpress, myCSharp

N
135 Beiträge seit 2006
vor 12 Jahren

Du könntest statt Trim auch Repleace verwenden und dann die Differenz der stringlänge ermitteln
String.Relpleace("n","");
Wenn Groß-und Kleinbuchstaben gezählt werden sollen, einfach ein String.ToUpper() machen.

Hinweis von herbivore vor 12 Jahren

Ich ging davon aus, dass die Trim-Funktion aufeinmal alle gleichen Zeichen entfernt

Deshalb gibt es ja die MSDN-Doku, damit man nicht vermuten, sondern nachschauen kann, wie es tatsächlich ist.

Und [Hinweis] Wie poste ich richtig? Punkt 1.1 gibt es, um solche unnötigen Threads zu vermeiden.

Thema geschlossen