# Aufkommen eines be*timmten Zeichens in einem String zählen



## Ishildur (11. Apr 2008)

Hallo zusammen
Tja ich denke, der Titel sagt vermutlich schon sehr deutlich, was ich genau suche!  Gibt es in Java eine Methode hierfür oder muss ich das selbst machen? In der Doku habe ich leider nichts dazu gefunden :-(

Mfg Ishildur


----------



## Verjigorm (11. Apr 2008)

selbst machen, sind vielleicht 3-4 Zeilen


----------



## maki (11. Apr 2008)

Entweder selbst schreiben, oder: http://commons.apache.org/lang/api/org/apache/commons/lang/StringUtils.html#countMatches(java.lang.String,%20java.lang.String)


----------



## Butterfly (11. Apr 2008)

Die Antwort "Selbst machen" bringt ihm wahrscheinlich nicht viel, wenn er wüsste wie er das anstellen könnte, würde er wohl kaum fragen.

Ein Vorschlag von mir:

```
String s = ...... //der String der untersucht werden soll
char c = .... // das Zeichen, welches du zählen willst
int count = 0; //Zählervariable

char[] tempArray = s.toCharArray(); //mach den String zu einem Char-Array

for(int i = 0; i < tempArray.length; i++) {
   if(tempArray[i] == c) {
      count++;
   }
}
```


----------



## L-ectron-X (11. Apr 2008)

Noch eine Variante:

```
public class CharacterCounter {
   public CharacterCounter(String text, char c) {
      int counter = 0;

      for(int i = 0, j = text.length(); i < j; i++) {
         if(text.charAt(i) == c) {
            counter++;
         }
      }
      
      System.out.println("Das Zeichen "+c+" kommt im übergebenen Text genau "+counter+" mal vor.");
   }

   public static void main(String[] args) {
      new CharacterCounter("Wie oft kommt in diesem Text ein bestimmtes Zeichen vor?", 'e');
   }
}
```


----------



## Der Müde Joe (12. Apr 2008)

oder

```
public static int[] count(String s){
		int[] result = new int[Character.MAX_VALUE];
		for(char c : s.toCharArray()){
			result[c]++;
		}
		return result;
	}
```

zählt jeden char


----------



## André Uhres (12. Apr 2008)

Verjigorm hat gesagt.:
			
		

> 3-4 Zeilen




```
private int count(String s, char r) {
    String x = "+*()?^|[]${}.\\".indexOf(r) > -1 ? "\\" : "";
    return s.length() - s.replaceAll(x + r, "").length();
}
```


----------



## Ark (12. Apr 2008)

L-ectron-X' Variante mal in eine Methode gestopft:

```
private static int count2(String s,char c){
	int cc=0;
	for(int i=0;i<s.length();i++){
		if(s.charAt(i)==c){
			cc++;
		}
	}
    return cc;
}
```




			
				Verjigorm hat gesagt.:
			
		

> sind vielleicht 3-4 Zeilen




```
private static int count(String s,char c,int cc,int i){
	for(i=s.length(),cc=0;--i>=0;cc+=s.charAt(i)==c?1:0);
	return cc;
}
```
Ark


----------



## Illuvatar (12. Apr 2008)

Andrés Methode etwas verfeinert 

```
private int count(String s, char r) { 
    return s.length() - s.replace(String.valueOf(r), "").length(); 
}
```


----------



## Leroy42 (12. Apr 2008)

Illuvatar hat gesagt.:
			
		

> Andrés Methode etwas verfeinert



Schon! 

Andrés Methode ist aber irgendwie _esoterischer_


----------



## André Uhres (12. Apr 2008)

Ich weiss nicht, ob ihr'wusstet, aber bei meiner Methode ist es so, dass sie auch mit 1.4 noch läuft


----------



## Janus (12. Apr 2008)

die variante von butterfly ist sehr wahrscheinlich nicht nur die portabelste, sondern auch die übersichtlichste und zufällig auch schnellste


----------



## André Uhres (12. Apr 2008)

Janus hat gesagt.:
			
		

> die variante von butterfly ist sehr wahrscheinlich nicht nur die portabelste, sondern auch die übersichtlichste und zufällig auch schnellste


Ja, aber es befolgt leider nicht das wichtige Verjigormsche Dreibisvierzeilenprinzip  :lol:


----------



## Ark (12. Apr 2008)

Janus hat gesagt.:
			
		

> die variante von butterfly ist sehr wahrscheinlich nicht nur die portabelste, sondern auch die übersichtlichste und zufällig auch schnellste


Auf Kosten von Speicherplatz, versteht sich. 

Ark


----------

