Laden...

Bestimmtes Zeichen in einem String zählen

Erstellt von fneuweiler vor 18 Jahren Letzter Beitrag vor 10 Jahren 30.516 Views
F
fneuweiler Themenstarter:in
17 Beiträge seit 2005
vor 18 Jahren
Bestimmtes Zeichen in einem String zählen

Hallo,

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

fneuweiler

S
8.746 Beiträge seit 2005
vor 18 Jahren

Mit der Hand. Schleife und zählen.

2.082 Beiträge seit 2005
vor 18 Jahren

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

49.485 Beiträge seit 2005
vor 18 Jahren

Hallo fneuweiler,

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

herbivore

6.862 Beiträge seit 2003
vor 18 Jahren

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.

49.485 Beiträge seit 2005
vor 18 Jahren

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

6.862 Beiträge seit 2003
vor 18 Jahren

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.

49.485 Beiträge seit 2005
vor 18 Jahren

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

T
156 Beiträge seit 2012
vor 10 Jahren

Hallo,

habe die Version von herbivore

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

genutzt und kann nicht sagen das diese langsam ist.

Gruß, telfa

1.002 Beiträge seit 2007
vor 10 Jahren

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

49.485 Beiträge seit 2005
vor 10 Jahren

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