mein Problem ist folgendes, ich würde gerne einen String nach Vokalen überprüfen und jedes mal den Zähler erhöhen wenn einer gefunden wird. Das geht soweit auch in Ordnung, jedoch ist mir diese Schreibweise zu lang.
public static int anzahlvokale(String s){
int len = s.length();
int vokale = 0;
for (int i=0;i<len;i++){
if (s.charAt(i) == 'a' ) vokale++;
if (s.charAt(i) == 'e' ) vokale++;
if (s.charAt(i) == 'i' ) vokale++;
if (s.charAt(i) == 'o' ) vokale++;
if (s.charAt(i) == 'u' ) vokale++;
}
return vokale;
}
Mein Compiler sagt mir jedoch die ganz Zeit, dass es zu einem Syntaxfehler. Ich habe jetzt schon ziemlich lange gesucht, finde aber einfach keine passende Lösung die char’s aneinander zu hängen.
(Vllt bin ich auch einfach zu blöd zum Suchen, aber als Anfänger lassen sich Probleme eher schwer exakt benennen)
Die Lösung von Timme finde ich durchaus angebracht. Ist prima lesbar- und wartbar, und das ist bisweilen wichtiger als ein möglichst kurzer Sourcecode.
pl4gu33s Lösungsvorschlag ließe sich noch etwas vereinfachen (imho) zu
Aber wenn es unbedingt kurz sein muss, dann wäre es wohl am einfachsten mit einem RegEx alle Nicht-Vokale rauszuwerfen und die verbleibenden Zeichen zählen zu lassen. Solche Loesungen sollte man dann aber mit einem erklärenden Kommentar versehen, denn sowas kann sehr schnell ins schwer lesbare ausarten.
// anzahl der Vokale im String ermitteln
int vokale = s.replaceAll("[^aeiouAEIOU]","").length();
Erstmal vielen Dank für die Antworten, dank euch hab ich’s jetzt;)
Die Oder-Verknüpfung( || ) hab ich auch versucht, aber leider falsch gemacht. Hab mich jetzt für sie entschieden…
Diesmal in richtig
[QUOTE=Dow_Jones;26803]Die Lösung von Timme finde ich durchaus angebracht. Ist prima lesbar- und wartbar, und das ist bisweilen wichtiger als ein möglichst kurzer Sourcecode.
[/QUOTE]
Dem möchte ich dann doch noch widersprechen!
Lesbar - ok, aber reichlich ineffizient !!
Wenn das zu prüfende Zeichen bspw. ein ‚a‘ ist, warum sollte ich dann jedesmal noch 4 weitere Zeichen prüfen ?
Die Lösung von MiMi ist sicher genauso gut lesbar, aber ebeen effizient (und das hat nichts mit kurzem Code zu tun)
Pfft, wenn man eh nur die 5 Vokale checkt ist das immer noch O(n). Konstante Vorfaktoren interessieren nicht.
Grundsätzlich stimme ich dir aber zu, Codeästhetik hin oder her.
Das Ganze bringt mich aber auf einen anderen Gedankengang: Wie sollte man Umlaute und Ligaturen zählen? Ist ein „ä“ ein Vokal? Oder zwei Vokale, wenn man es als „ae“ schreibt? Und verwendet überhaupt irgendjemand Ligaturen wie Æ, œ, ?, ??? Ich selbst habe sie noch nie genutzt.
Keine Ahnung ob sie im Duden stehen, aber beim Buchdruck sind sie ganz normal. Java bzw. Unicode kennt sie ebenfalls. Warum sollte man sie also nicht verwenden? Oder sie zumindest bei Input aus unbekannter Quelle berücksichtigen? Aus irgendeinem Grund scheint sich jedoch kein Softwareentwickler darum zu schehren. Beispiel: Als ich das Posting schrieb wurden die Ligaturen für „ij“ und „fi“ korrekt dargestellt. Jetzt, beim Lesen des fertigen Threads, erscheint da bei mir für ij ein „?“ und bei fi ein „???“.
Hmm. Soweit ich weiss wurden die Ligaturen schon im Mittelalter von den bibelabschreibenden Mönchen „erfunden“ - und Opera unter Windows bekommt das offensichtlich heute noch nicht richtig hin. Und da heisst es immer die Computertechnik würde sich ach so schnell weiterentwickeln…
Deshalb gibt es ja LaTeX mit speziell dafür entwickelten Schriftarten Aber Recht hast du, im Hausgebrauch ist Textsatz (zumindest unter Windows kann ich das beurteilen) eine Katastrophe. Toll sind auch einzelne fett erscheinende Buchstaben, die plötzlich nicht mehr fett sind, wenn man sie anders skaliert…