Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

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



Dabei seit:
Beiträge: 51

Themenstarter:

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

beantworten | zitieren | melden

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.
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von _Bugrick_ am .
private Nachricht | Beiträge des Benutzers
MrSparkle
myCSharp.de - Team

Avatar #avatar-2159.gif


Dabei seit:
Beiträge: 5983
Herkunft: Leipzig

beantworten | zitieren | melden

Zitat von _Bugrick_
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
private Nachricht | Beiträge des Benutzers
_Bugrick_
myCSharp.de - Member



Dabei seit:
Beiträge: 51

Themenstarter:

beantworten | zitieren | melden

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.
private Nachricht | Beiträge des Benutzers
Coffeebean
myCSharp.de - Team

Avatar #avatar-3295.gif


Dabei seit:
Beiträge: 2461
Herkunft: Deutschland/Schweiz

beantworten | zitieren | melden

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
private Nachricht | Beiträge des Benutzers
xxMUROxx
myCSharp.de - Member

Avatar #avatar-3236.jpg


Dabei seit:
Beiträge: 1626
Herkunft: Südtirol/Italien

beantworten | zitieren | melden

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
private Nachricht | Beiträge des Benutzers
Neidhard
myCSharp.de - Member



Dabei seit:
Beiträge: 140

beantworten | zitieren | melden

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.
private Nachricht | Beiträge des Benutzers

Moderationshinweis von herbivore (14.10.2011 - 10:11:12):

Zitat
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.