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

  • »
  • Community
  • |
  • Diskussionsforum
Bestimmtes Zeichen in einem String zählen
fneuweiler
myCSharp.de - Member



Dabei seit:
Beiträge: 17

Themenstarter:

Bestimmtes Zeichen in einem String zählen

beantworten | zitieren | melden

Hallo,

wie kann iche in bestimmtes Zeichen in einem String zählen?


fneuweiler
private Nachricht | Beiträge des Benutzers
svenson
myCSharp.de - Member



Dabei seit:
Beiträge: 8775
Herkunft: Berlin

beantworten | zitieren | melden

Mit der Hand. Schleife und zählen.
private Nachricht | Beiträge des Benutzers
frisch
myCSharp.de - Member

Avatar #avatar-1724.gif


Dabei seit:
Beiträge: 2118
Herkunft: Coburg / Oberfranken

beantworten | zitieren | melden

Hallo,

mein Vorschlag: Mach eine List und dann sagst du, der inhalt der list = dein string.Split(deinZeichen) und dann einen count auf die items.
Es ist toll jemand zu sein, der nichts von der persönlichen Meinung Anderer hält. - frisch-live.de
private Nachricht | Beiträge des Benutzers
herbivore
myCSharp.de - Experte

Avatar #avatar-2627.gif


Dabei seit:
Beiträge: 52329
Herkunft: Berlin

beantworten | zitieren | melden

Hallo fneuweiler,

Regex.Matches (zeichenkette, Regex.Escape (zeichen)).Count

herbivore
private Nachricht | Beiträge des Benutzers
talla
myCSharp.de - Experte

Avatar #avatar-3214.jpg


Dabei seit:
Beiträge: 7290
Herkunft: Esslingen

beantworten | zitieren | melden

Machs nicht per Regex, ist viel zu langsam wenn du wirklich nur einzelne Zeichen suchst! Habs selber erst durch. So wie Svenson sagt ist schon am schnellsten:

int CountChar(string s, char search) { 
  int tmp;
  for(int i = 0; i < s.Length; i++) {
    if(s[i] == search) {
      tmp++;
    }
  }
  return tmp;
}
Baka wa shinanakya naoranai.

Mein XING Profil.
private Nachricht | Beiträge des Benutzers
herbivore
myCSharp.de - Experte

Avatar #avatar-2627.gif


Dabei seit:
Beiträge: 52329
Herkunft: Berlin

beantworten | zitieren | melden

Hallo talla,

dass es mit Regex langsamer ist als mit deiner Methode ist klar, aber das es zu langsam ist, lässt sich ohne die konkrete Aufgabenstellung einfach nicht sagen. Ich weise deine Behauptung daher zurück.

Und mein Code ist übersichtlicher. Je leistungsfähiger die Rechner und je umfangreicher die Programme werden, desto wichtiger ist Lesbarkeit gegenüber Performace.


Hallo fneuweiler,

machs per Regex :-)

herbivore
private Nachricht | Beiträge des Benutzers
talla
myCSharp.de - Experte

Avatar #avatar-3214.jpg


Dabei seit:
Beiträge: 7290
Herkunft: Esslingen

beantworten | zitieren | melden

Er redete von einem! betimmten Zeichen, da ist der Regex im Vergleich zur Schleife saulahm Glaube mir, hab erst diese Woche ne Textdatei mit über 100000 Zeilen einlesen müssen und in jeder Zeile die Anzahl eines Zeichens zählen müssen Hatte es erst per Regex und dann per Schleife ists viel kürzer.
Ganz anders siehts bei regulären Ausdrücken aus! Da gebe ich dir recht, da geht nichts über diese Funktion.
Baka wa shinanakya naoranai.

Mein XING Profil.
private Nachricht | Beiträge des Benutzers
herbivore
myCSharp.de - Experte

Avatar #avatar-2627.gif


Dabei seit:
Beiträge: 52329
Herkunft: Berlin

beantworten | zitieren | melden

Hallo talla,

nochmal: Es hängt von der konkreten Aufgaben ab, ob eine Lösung zu langsam ist. Ob eine Lösung langsamer ist als eine andere, ist für sich noch kein Kriterium. Es ist mir als Benutzer z.B. egal, ob ich auf die Antwort eines Programms 1µs oder 1ms warten muss. Eine Lösung, die also tausendmal langsamer ist, ist hier immer noch schnell genug.

Ich wehre mich nicht dagegen, dass Regex langsamer sind, ich wehre mich gegen die pauschale Aussage, dass sie zu langsam sind.

herbivore
private Nachricht | Beiträge des Benutzers
telfa
myCSharp.de - Member



Dabei seit:
Beiträge: 162
Herkunft: Rheinbach

beantworten | zitieren | melden

Hallo,

habe die Version von herbivore

Regex.Matches (zeichenkette, Regex.Escape (zeichen)).Count


genutzt und kann nicht sagen das diese langsam ist.

Gruß, telfa
private Nachricht | Beiträge des Benutzers
m0rius
myCSharp.de - Member

Avatar #avatar-3125.png


Dabei seit:
Beiträge: 1043

beantworten | zitieren | melden

Hallo zusammen,

der Vollständigkeit halber:

int sCount = "Heizölrückstoßabdämpfung".Count(c => c == 's');

Nicht vergessen, System.Linq importieren.

m0rius
Mein Blog: blog.mariusschulz.com
Hochwertige Malerarbeiten in Magdeburg und Umgebung: M'Decor, Ihr Maler für Magdeburg
private Nachricht | Beiträge des Benutzers
herbivore
myCSharp.de - Experte

Avatar #avatar-2627.gif


Dabei seit:
Beiträge: 52329
Herkunft: Berlin

beantworten | zitieren | melden

Hallo zusammen,

mein Vorschlag stammt von Januar 2006. Linq stand erst mit C# 3.0 im November 2007 zur Verfügung. Aus heutiger Sicht würde ich die Linq-Version bevorzugen. Sie ist ähnlich gut lesbar und hat performance-mäßig mehr Luft. Trotzdem bleibe ich dabei, dass bei Performance üblicherweise nicht das "möglichst schnell" im Vordergrund stehen sollte, sondern das "schnell genug, dafür möglichst einfach/verständlich/lesbar" in den meisten Fällen die bessere Wahl ist. Bei zwei gleich gut lesbaren Alternativen kann und sollte man natürlich die schnellere bevorzugen.

herbivore
private Nachricht | Beiträge des Benutzers