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.
Undzwar möchte ich von der Zeichenkette "Fahrrad", wenn die schleife einen Zeichen "r" findet, es mit dem Zeichen "n" ersetzen.
Habe mal so angefangen:
Java:
public class array {
public static void main (String[] args) {
String team = new String ("Fahrrad");
for(int i = 0; i < team.length(); i++) {
if (?????? ) {
}
}
}
}
Wie muss die if-Bedingung aussehen?
Meine Theorie: Wenn i = "r", dann tuhe........
Aber wie muss es Syntax technisch eingebunden werden. Eclipse gibt immer fehlermeldung.
Kann ich Strin benutzen oder muss ich Stringbuilder benutzen. Verstehe nicht genau den Unterschied?
Nen String ist immutable, verändern kannst du da also nichts. Nen StringBuilder wäre da schon besser geeignet. StringBuffer bietet dir da auch Methoden die dir Buchstaben ersetzen können.
OK, das mit den methoden für String ist mir bekannt. Aber kann man es denn nicht auch mit der gezeigten Schleife machen?
Mir geht es darum die Benutzung der for-schleife anzueignen.
Wie kann ich den compiler bei der for-schleife dazu bringen, dass wenn "r" erscheint, er es in "n" umändert?
Wie muss der Ausdruck in der if-Bedingung aussehen um es zu verwirklichen?
Wenn du unbedingt eine for-Schleife willst, solltest du mal bei String#charAt(int index) vorbeischauen, wo du einfach noch den Index deines aktuellen Zeichens übergeben musst. Alternativ kannst du auch erst deine Zeichenkette in ein char-Array umwandeln mittels String#toCharArray() und dann durch dieses Array laufen, kommt auf´s gleiche heraus.
Kann ich in der if-Bedingung nicht gleich eine zeichen vergleichen?
Wie zb.:
Java:
public class array {
public static void main (String[] args) {
StringBuilder team = new StringBuilder ("Fahrrad");
for(int i = 0; i < team.length(); i++) {
if (team[i] = "r" ) {
}
}
}
}
Wenn du unbedingt eine for-Schleife willst, solltest du mal bei String#charAt(int index) vorbeischauen, wo du einfach noch den Index deines aktuellen Zeichens übergeben musst. Alternativ kannst du auch erst deine Zeichenkette in ein char-Array umwandeln mittels String#toCharArray() und dann durch dieses Array laufen, kommt auf´s gleiche heraus.
Mit charAt würde ich ihm ja aber sagen wo das zeichen "r" sich befindet. Der compiler soll ja aber selber darauf kommen.
Sozusagen: Wenn r erscheint, dann mach dies und das!
Erstens: eine Gleichheitsbedingung hat zwei Gleichheitszeichen (if a == "b").
Zweitens: Das kannst du prinzipiell schon machen, aber wie du in meinem voigen Beitrag gelesen haben könntest, musst du dafür deine Zeichenkette erstmal in ein char-Array umwandeln (.toCharArray).
Drittens: Für char nimmst du dann aber nicht doppelte Anführungszeichen, sondern einfache Hochkommas.
Also:
Java:
String str = "Fahrrad";
char[] characters = str.toCharArray();
for (int i = 0; i < characters.length; i++) {
if (characters[i] == 'r') ...
}
Oder eben, was bei ´nem StringBuilder dann auch geht:
Java:
StringBuilder sb = new StringBuilder("Fahrrad");
for (int i = 0; i < sb.length(); i++) {
if (sb.charAt(i) == 'r') ...
}
EDIT:
Mit charAt würde ich ihm ja aber sagen wo das zeichen "r" sich befindet.
Heist das ich kann direkt in der if-Bedingung meinen String in char umwandeln "sb.charAt(i)"???
Kann ich in der if-bedingung immer eine String Mehode anwenden???
Heist das ich kann direkt in der if-Bedingung meinen String in char umwandeln "sb.charAt(i)"???
Kann ich in der if-bedingung immer eine String Mehode anwenden???
public class array {
public static void main (String[] args) {
StringBuilder team = new StringBuilder ("Fahrrad");
StringBuilder n = new StringBuilder ("n");
for(int i=0; i < team.length(); i++) {
if(team.charAt(i) == 'r') {
team[i] = n;
}
}
System.out.println(team);
}
}
- wie der Name bereits sagt - einen einzelnen char zurüchgibt. Daher musst du diesen in einfache Hochkommas einschließen in der Bedingung, nicht - wie bei Strings sonst üblich - in doppelte.
Zu deiner Frage: in einer If-Bedingung kann alles stehen, was in irgend einer Form wahr sein könnte, entweder formuliert durch einen Vergleich (z.B.
Code:
if(zahl == 3)
) oder durch die Verwendung eines Wahrheitswetes oder einer Methode, die einen solchen zurückgibt (z.B.
public class array {
public static void main (String[] args) {
StringBuilder team = new StringBuilder ("Fahrrad");
StringBuilder n = new StringBuilder ("n");
for(int i=0; i < team.length(); i++) {
if(team.charAt(i) == 'r') {
team[i] = n;
}
}
System.out.println(team);
}
}
Heist das also, dass ich das Zeichen eines String´s nur mit einer dementsprechenden Methode vertausche oder ersetzen kann?
Ich kann also nicht direkt sagen "Ersetze 4. komponente des String´s mit dem Zeichen "n"?"
Auf dem String selbst sowieso nicht, sondern wie bereits mehrfach erwähnt nur mittels StringBuilder, da ein String nicht veränderlich ist. Um auf deine Frage zu antworten: eine direktere Methode als die bisher genannten gibt es nicht, aber ich denke, das reicht auch...
VORSICHT ... kann bei anfängern leicht zu fehlern führen da replaceAll eine RegEx erwartet ... und die meisten dann sowas wie ".+?" mit einbauen was aber RegEx steuerzeichen sind ...
@TO
für sowas einfaches solltest du String.replace(String, String) verwenden ...
Vielleicht möchte man als Anfänger so etwas aber auch einmal selber programmieren und nicht nur alles nehmen, was es schon gibt, um es besser zu verstehen.
StringBuilder team = new StringBuilder ("Fahrrad");
String text = "n";
for(int i=0; i < team.length(); i++) {
if(team.charAt(i) == 'r') {
team.replace(i, i+1, text);
}
}
System.out.println(team);
mit dieser methode bekomme ich aber "Fahnnad". Er würde ja alle "r" Zeichen mit "n" Zeichen ersetzen. Aber gibt es eine möglichkeit es so hinzubekommen, so das ich die 4. Komponente vom String mit dem Zeichen "n" ersetze?
Und kann mir jemand bitte sagen was hier genau passiert:
"Schreiben Sie eine Java-Methode mit der Signatur public static String swap (String text), die aus einer als Parameter übergebenen Zeichenfolge durch Vertauschen des ersten und letzten ZEichens eine neue Zeichenfolge bildet.
Die neue Zeichenfolge soll als Ergebnis von swap zurückgeliefert werden."
Es muss ein String mit der Kennzeichnung "text" erstellt werden.
Also
Java:
String text = "vier";
Richtig?
Mich bringt aber String swap irgendwie durcheinander. Was ist das? Ein String mit der Bezeichnug "swap"? Wozu?
ich würde den TO mal dringend raten, sich die grundlagen anzuschauen.
Also, grundsätzlich ist java objectorientiert aufgebaut, was auch verhindert, dass du einen String direkt ohne methodenaufrufe verändern kannst, was aber besser für den programmierer ist, da so viele fehler ausgeschlossen werden (z.b. siehe typische c fehler).
Ein String ist intern auch nur ein array von chars, um das ganze aber besser zu verwalten existiert die Klasse String, die das char array kapselt und methoden bietet, um dieses zu verwalten.
Eine methode in java ist immer folgendermaßen aufgebaut:
zugriffskontrolle rückgabetyp methodenName(Typ parametername, ...){
//was passiert
}
eine methode kann public (von überral zugägnlich), private (nur aus aktueller klasse zugänglich) oder auch protected sein, für den anfang sind nur public und privat interessant. Der rückgabetyp kann entweder ein primitiever datentyp (int, float, double, short, char, byte, long) oder jedes beliebige Object (z.b. String) sein, oder auch gar nix, dann seht void da, was zeigt, dass die methode nix zurückgibt. eine methode kann keinen, einen, oder x viele parameter kriegen.
in der praxis sieht sowas dann z.b. so aus:
public int getInteger(){}, oder private long getLong(){}, oder auch (für dich noch nicht ganz so interessant) protected void doSomething(){}
In deinem fall ist eine methode gefordert, die public (öffentlich) sein soll, zudem soll sie statisch sein, was das schlüsselwort static ausdrückt, und sie soll einen String zurückgeben, und erhält als paramter auch einen String und heißt swap:
Das wäre schonmal das grundgerüst, nun soll deine Methode den ersten buchstaben von text mit dem letzten buchstaben von text vertauschen und das ergebniss dann ausgeben. Für das vertauschen gibt es jetzt viele möglichkeiten, um jetzt bei deiner for schleife zu bleiben nutzen wir mal ein array um das ganze zu realisieren:
Java:
//folgendes ist nicht die beste und auch nicht die schnellste möglichkeit
public static String swap(String text){
//array deklarieren, dass dann alle zeichen des strings enthält
char[] charArrayAusText = text.toCharArray(); //ruft die mehtode von String auf, die die einzelnen zeichen als array zurückgibt
//array festlegen, wo der neue String rein kommt
char[] neuerString = new char[charArrayAusText.length] //die gleiche länge wir das alte array
//nun schreiben wir schonmal den ersten buchstaben an die letzte stelle und den letzten an die erste:
neuerString[0] = charArrayAusText[charArrayAusText.length-1]; //letzer buchstabe an erste stelle
neuerString[neuerString.length-1] = charArrayAusText[0]; //erster buchstabe an letzte stelle
//in schleife alle anderene buchstaben reinschreiben:
for(int i = 1; i<neuerString.length-1; i++){
neuerString[i] = charArrayAusText[i];
}
//nun muss ja noch der neue String mit return zurückgegeben werden, dazu nutzen wir den String construktor, der
//ein char array etgegennimmt:
return new String(neuerString);
}
EDIT:
Statische Methoden sind von überral her erreichbar, um sie aufzurufen wird folgendes verwendet:
KlassenName.methodenname();
weiterführend würde ich empfehlen folgndes durchzulesen:
[TIPP]The ?static? Keyword in Java Tutorial / Java Grundlagen / Variablen[/TIPP]
Erstmal vielen vielen dank für die Ausfürliche Antwort.
Verstehe ich das Richtig, das die methode tocharArray() meinen String text in eine Array char[] charArrayAusText zuweist. Und das dies notwendig ist damit ich irgendwelche Komponenten meines Parameters vertauschen kann? Würde heissen das die Zeichenkette, die ich vom Typ String zugewiesen habe, ich umwandle in den Typen char[], somit ich beliebige manipulationen vornehmen kann?
Dies wäre doch auch ein Lösungsweg um das erste Zeichen mit dem letzten Zeichen zu Vertauschen!
Zumindest funktioniert es.
Java:
public class Vertauschen {
public static void main (String[] args) {
String team = new String("Barcelona");
char[] teamNeu = team.toCharArray();
char erste = teamNeu[0];
char letzte = teamNeu[8];
teamNeu[0] = letzte;
teamNeu[8] = erste;
System.out.println(teamNeu);
}
}
Wenn´s geht, ist doch erstmal super. Möchstest du aber wirklich ein String-Objekt erhalten, ist an der Stelle noch nicht Schluss, du müsstest noch ein neues erstellen, z.B. so:
Gut einen String hätte ich noch erstellen sollen. Die vorfreude war zu gross, dass es funktioniert hat
Noch eine Frage zum Quellcode von darkeye2:
Java:
char[] neuerString = new char[charArrayAusText.length]
"charArrayAusText.length" die length methode bewirkt das ich meine VOLLE länger der zeichenkette dem char neuerString zuweise? Also wenn es z.B. "Barcelona" ist wird auch die Zeichenkette "Barcelona" char neuer String zugewiesen?
Wenn es so wäre:
Java:
char[] neuerString = new char[charArrayAusText.length-1]
würde es ausser der letzten komponente, die zeichenkette an neuerString zuweisen. Wie z.B. "Barcelona" zugewiesen an neuerString wird "Barcelon", also ohne a. Ist das so korrekt?
char[] neuerString = new char[charArrayAusText.length-1]
würde es ausser der letzten komponente, die zeichenkette an neuerString zuweisen. Wie z.B. "Barcelona" zugewiesen an neuerString wird "Barcelon", also ohne a. Ist das so korrekt?
also grunsätzlich gibt dir array.length immer die länge des arrays zurück, also wie viele zeichen drin sind:
sprich:
char[] test = "test".toCharArray();
so würde jetzt test.length dir 4 zurückgeben, weil der string test aus viel buchstaben besteht und somit das array auch vier ellemente hat.
die zeile:
Java:
char[] neuerString = new char[charArrayAusText.length]
erstellt ein neues array vom typ char, das aber leer ist (keine buchstaben drin), aber in dieses array kann man eine bestimmte anzahl an buchstaben rein tun, diese anzahl ist durch das ergebniss von charArrayAusText.length festgelegt.
Ein array ist im grunde sowas wie eine schrank mit regalen, jedes regal kann nur ein element aufnehmen, in dem fall muss das element vom typ char sein, somit haben wir hier einen schrank erstellt, der eine bestimme anzahl an regalen hat, von dennen des jeweils einen char aufnehmen kann.
Bei arrays muss bereits beim erstellen die größe festegelegt werden, es müssen zwar danach nicht alle "regale" besetzt werden, aber du kannst nicht mehr "sachen" in den "schrank" tun, als regale vorhanden sind.
wenn du also mit deiner zeile:
Java:
char[] neuerString = new char[charArrayAusText.length-1]
ein array erstellst, und dein ausgangstext, der sich im charArrayAusText befindet, "Barcelona" war, hast du jetzt ein leeres array, in das du nur noch maximal "Barcelon" reinschreiben könntest, weil das array (der schrank) zu kleine für das ganze wort ist.
ja, das stimmt
im übrigen:
chars kannst du wie shorts verwenden, also auch auf diese weise manipulieren
Bsp.:
Java:
char c = 'a';
char c2 = c+1;
System.out.println(c2); //die ausgabe wäre dann ein b
Das ist praktisch, wenn zum beispiel überprüfen willst, ob der char in einem bestimmten bereich liegt, also wenn ich jetzt will, dass der user einen string eingibt, der nur aus den buchstaben c,d,e,f,g besteht, kann man das überpfrüfen, in dem man den string in ein char array umwandelt und dann jeden buchtaben folgendermaßen überprüfst:
Java:
//öffentliche methode mit dem namen validChar, die einen boolischen wert zurücklievert, ob der buchstabe im gewünschten bereich liegt
public boolean validChar(char c){ //öffentliche mehtode namens validChar, die als parameter einen char bekommt und einen
//boolean zurückgibt, der aussagt, ob der char eine c,d,e,f oder g ist.
if(c>='c' && c<= 'g'){ //wenn der werte von c>= der von buchstaben c ist, und gleichzeitig
// der wert von c<= dem wert vom buchstaben g ist
return true; //gib true (wahr) zurück
}
return false; //diese stelle wird nur erreicht, wenn return vorher noch nicht aufgerufen wurde
//demnach kann die aussage an dieser stelle ja nur noch falsch sein, also geben wir false zurück
}