# Vokale zählen



## Timo90 (9. Dez 2009)

Ich möchte ein Programm schreiben, welches die Vokale eines gegebenen Strings s zählt.

Ich würde ne Schleife schreiben welche jeden Buchstaben überprüft auf Vokal

s.charAt(i)== 'a' || ...

dass sollte dann true ergeben und bei true sollte anzVokal++ gemacht werden...jedoch funktioniert das mit dem Vergleichen nicht so wirklich.

Danke


----------



## madboy (9. Dez 2009)

Was funktioniert denn nicht? Exception?


----------



## partsch (9. Dez 2009)

du könntest sie mit einem switch vergleichen:

```
char mayVokal = word.charAt(i);
			switch(mayVokal){
			case 'a': ++vokale; break;
			case 'e': ++vokale; break;
			case 'i': ++vokale; break;
			case 'o': ++vokale; break;
			case 'u': ++vokale; break;
			}
```


----------



## Guybrush Threepwood (9. Dez 2009)

Soll das nur für's Deutsche funktionieren, oder generell? Ansonsten wären ja noch viel mehr Zeichen relevant (ohne gewähr für Vollständigkeit): äöüÄÖÜßéèêëôÉÈÊËÀÁÂÅÃÆàáâæåãçÔÒÓÕØòóôõøœìíîÌÍÎùúûÙÚÛ

Dann könnte man es ja auch so machen:

```
String text = "..."; //irgend ein text
int number = text.length() - text.replaceAll("[aeiouAEIOUäöüÄÖÜßéèêëôÉÈÊËÀÁÂÅÃÆàáâæåãçÔÒÓÕØòóôõøœìíîÌÍÎùúûÙÚÛ]", "").length();
```
 (ungetestet)

Da braucht man dann auch keine Schleife, sondern berechnet, um wie viel ein String schrumpft, wenn man die Vokale raushaut.


----------



## w0ddes (10. Dez 2009)

@ Guybrush Threepwood

Danke für diese Idee, hatte ein ähnliches Problem und konnt es damit nun lösen 
Aber mal Offtopic:  Langeweile?


----------



## Guybrush Threepwood (10. Dez 2009)

> Aber mal Offtopic: Langeweile?



Nee, Aufbesserung des Karma. Ich will halt nur nicht im nächsten Leben als Köcherfliegenlarve wiedergeboren werden.


----------



## Timo90 (10. Dez 2009)

Sollte nur fürs deutsche sein...die Select-Case Variante war ne super Idee!!! Danke )


----------



## Marco13 (10. Dez 2009)

... wobei es da ein

```
case 'a':
            case 'e':
            case 'i': 
            case 'o':
            case 'u': ++vokale; break;
```
schon tun würde...


----------



## Landei (10. Dez 2009)

partsch hat gesagt.:


> du könntest sie mit einem switch vergleichen:
> 
> ```
> char mayVokal = word.charAt(i);
> ...



Das ist der reine Overkill. Wie wäre es mit

```
int vokale = 0;
for(int i = 0; i < word.length; i++) vokale += "aeiou".indexOf(word.charAt(i)) < 0 ? 0 : 1;
```


----------



## Guybrush Threepwood (10. Dez 2009)

Da sieht man mal wieder, auf wie viele verschiedene Arten ein Problem programmiertechnisch lösbar ist. Da soll nochmal einer sagen, Programmieren ist keine kreative Leistung.

Natürlich ist meine Lösung am elegantesten. :bae:

P.S.: Sind äöü bei Euch keine Vokale?

P.P.S.: Dann müsste man noch diskutieren, ob die Diphtonge eu, ei, äu und das lange ie jeweils nur als einzelner Vokal gehandhabt werden, so wie es in der Phonetik meist gehandhabt wird. Das kommt aber sicher auf den Anwendungsfall an.


----------



## Landei (11. Dez 2009)

Übrigens: Auch wenn ich switch hier für unangemessen halte, gäbe es in diesem Fall noch eine Optimierung. Wenn man in verschiedenen case-Abschnitten das gleiche tut, kann man auch "durchfallen" lassen:

```
char mayVokal = word.charAt(i);
switch(mayVokal){ case 'a':  case 'e': case 'i': case 'o': case 'u': vokale++; }
```


----------



## w0ddes (11. Dez 2009)

Landei hat gesagt.:


> Übrigens: Auch wenn ich switch hier für unangemessen halte, gäbe es in diesem Fall noch eine Optimierung. Wenn man in verschiedenen case-Abschnitten das gleiche tut, kann man auch "durchfallen" lassen:
> 
> ```
> char mayVokal = word.charAt(i);
> ...



wie Marco13 schon sagte


----------



## Landei (11. Dez 2009)

Oh, hatte ich überlesen...

Kann man aber nicht oft genug sagen ;-)


----------

