Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
Hallo,
wir haben gestern in der Schule die Aufgabe bekommen, alle Vokale in einem String durch ein "a" zu ersetzen und zwar so, dass wir nicht jeden einzelnen Buchstaben mit
String.replace("vokal","a")
ersetzen, sondern das soll in einer Schleife passieren.
ich hab schon das folgende ausprobiert.
Java:
//String eingeben
String s = br.readLine();
String v = eiou;
for (int i=0;i<s.length();i++)
{
s = s.replace(v.charAt(i),"a")
}
Allerdings kommt hier ein Fehler, weil " v.charAt(i)" kein String ist (glaub ich zumindestt)
Ich frag mich wie man das sonst machen könnte.
Ich bedanke mich schon im voraus für jede hilfreiche Antwort
s = s.replace(v.charAt(i),"a") muss zu s = s.replace(v.charAt(i),'a') geändert werden, weil nur String.replace(String, String) und String.replace(char, char) existiert und nicht String.replace(char, String).
Exceptions und Errors sind doch so hübsch, warum schaut da nur jeder 5. drauf? Und die JavaDoc erst. replace braucht 2 Chars als Parameter, für Strings heißt die Methode replaceAll.
Ich würde mir ein Array mit allen Chars die ersetzt werden sollen anlegen und es durchlaufen, wäre imho erblich hübscher.
Übrigens, Strings werden mit Anführungszeichen intialisiert.
Edit, die warscheinlich 100derste: Und wärend dem Schleifendurchlauf wird dir ebenfalls eine Exception fliegen, falls die Eingabe länger als er String mit den Vokalen ist.
Du solltest mal überlegen was jetzt in deiner Schleife passiert:
Du extrahierst _ein_ Zeichen aus dem String, dann ersetzt du dieses evtl durch ein anderes, und dann überschreibst du deinen gesamten Anfangsstring durch ein einziges Zeichen ...
Als Tipp von mir zur Lösung: String#toCharArray() in ein Array speichern, dann dieses Array durchgehen und einen neuen String zeichen für Zeichen aufbauen indem du entweder ein 'a' oder das Zeichen aus dem Array verwendest.
Leute Meine Güte ^^ Der Code steht nich so bei mir im Programm. Hab ihn vom Kopf aus geschrieben.
Es sollte nur die grobe Struktur des Programms wiedergeben. Semikolons kann ich schon setzen^^
Edit, die warscheinlich 100derste: Und wärend dem Schleifendurchlauf wird dir ebenfalls eine Exception fliegen, falls die Eingabe länger als er String mit den Vokalen ist.
Nein, dein Source würde die Schleife so oft, wie Buchstaben in der Eingabe sind durchlaufen. Irgendwann sollte er einen Char hohlen wollen, der garnicht existiert, da v zu kurz ist. (Hoffentlich habe ich es jetzt gut aber so erklärt, dass du auch darüber nachdenkst und verstehst.)
Du musst unterscheiden:
" - Anführungszeichen, definieren Strings, also ein Array aus Chars.
' - Apostroph, definiert ein einzelnes Char.
´` - Akut/Gravis geben glaub ich Akzente wieder, und wenn du keins auf einen Buchstaben brauchst haben sie keine Bedeutung in Java.
@Volvagia
Ich hatte mir das so vorgestellt dass ich in der äußeren Schleife, die bis s.length() geht, einen char extrahiere und ihn dann in der inneren Schleife wenn es ein Vokal ist durch a ersetze.
Danke ich werds mir morgen nochmal in Ruhe angucken. Ich hab ja schließlich noch nen Real Life
PS: Strings erscheinen mir lieber. Jetz habe ich alle .charAT´s mit .substrings ersetzt.
Die schleifen sahen dann so aus:
Java:
for (i=0;i<L;i++) //L ist die Länge von S1, das ist der eingegebene String
{
S2 = S1.substring(i);
for(int j = 0;j<4;j++)
{
S2 = S2.replaceAll(V.substring(j),"a");
}
[B]S1 = S2 + S1.substring(i);[/B]
}
Die letzte Zeile ist noch sinnlos, muss ich noch korrigieren, aber die Idee ist gut oder?
Und entschuldigt wenn ich da Quatsch hingeschrieben hab,mein gehirn ist schon total ermüdet, sitze schon seit 6-7 Stunden an Java rum
Wer nicht? :bae:
Aber ich würde definitiv die Chars nehmen. String können nicht verändert werden, das heißt er muss theoretisch bei jeden Schleifendurchlauf 4 neue Strings erzeugen. (1x Zeile 3, 2x Zeile 6, 1x Zeile 8.)
Ob die StringCache verwendet wird weiß ich nicht, es dürften aber auf jeden Fall einige sein, was man vermeiden kann.
Übrigens gibt String#substring(int) nicht nur das Zeichen als String, sondern String#substring(int, String#lenght) zurück.