Replace mit Scan

monsterherz

Aktives Mitglied
Halli, ich brauch mal wieder Eure Hilfe. Ich will in einem String der eingeben wird bestimmte Zeichen ersetzen. Leider meckert er entweder das der int und String nicht kombiniert werden dürfen oder wenn ich deshalb die Scan Einlesung auf String änder funktioniert das auch nicht. Wo ist mein Denkfehler?
 

Anhänge

  • Screenshot from 2023-01-29 15-29-08.png
    Screenshot from 2023-01-29 15-29-08.png
    61,6 KB · Aufrufe: 1
Java:
import java.util.Scanner;
public class Ersatz
{
        public static void main(String args[])
        {
                Scanner neuer_scan=new Scanner(System.in);
                System.out.println("Bitte den Text eingeben");
                Int eingabe=neuer_scan.nextInt();
                String neuer_text=eingabe.replaceAll("sc","fM");
                System.out.println(neuer_text);
        }
}
 
String groß - Integer klein? Muss frau das verstehen ? ;-)

Aber dann meckert er so:


Java:
michi@localhost ~/java $ javac Ersatz.java
Ersatz.java:9: error: int cannot be dereferenced
        String neuer_text=eingabe.replaceAll("sc","fM");
                                 ^
1 error

Eben der Misch Masch aus int und Str wie ich das interpretiere ...
 
Es gibt paar Grundtypen in Java. Diese werden klein geschrieben: int, double, float, long, ....

Dann gibt es Klassen, diese werden Groß geschrieben. Also String, Scanner, ...

Und Methoden lassen sich nur auf Instanzen aufrufen, also auf Objekten von Klassen. Daher kannst Du auf int keine Methode aufrufen.

Macht auch kein Sinn, denn ein int ist ja eine Zahl. In einer Zahl ist kein sc und kann auch kein fM drin sein!
 
Wenn Du einen String einlesen willst, dann solltest du das auch machen.

Dazu könnte man sich die Klasse Scanner einmal näher ansehen:

Da finden sich dann Methoden wie next und nextLine.
 
ok, Frau übt und studiert noch etwas. Danke erstmal
ok, Session closed 🙂

Java:
import java.util.Scanner;
public class String_Scanner {
  public static void main(String[] args) {
    // String input with the Java Scanner
    System.out.println("Bitte den Text einfügen");
    Scanner stringScanner = new Scanner(System.in);
    String daten = stringScanner.next();
    String uebersetzung=daten.replaceAll("sc","fM");
        System.out.println(uebersetzung);
  }
}
 
Ich will mehrere Strings ersetzen. Unter Python kann man einfach mehrfach replace verwenden. Unter Java habe ich noch Nix gefunden. Wie kann ich mehrere verschiedene Strings ersetzen?

Also nicht replaceAll sondern replaceAll("sc","fM") UND noch weitere Ersetzungen ("dec","Abn)
 
Hast Du Dir die Dokumentation von String einmal angesehen? Was macht denn das replaceAll?

Da der veränderte String zurück gegeben wird, kannst Du in Java ebenfalls einfach erneut repleaceAll aufrufen.
 
Java:
undefinedimport java.util.Scanner;

public class Ersatz

{

        public static void main(String args[])

        {

                Scanner stringScanner =new Scanner(System.in);

                System.out.println("Bitte den Text eingeben");

                //so kenn ich es von Python:

                String neuer_text=stringScanner.replaceAll("sc","fM").replaceAll("inc","Zun");

                //Aber auch etwas umständlicher funktioniert es nicht ... Please help :-(

                String neuer_text1=stringScanner.replaceAll("dec","Abn");

                System.out.println(neuer_text1);

        }

}
 
überlege Dir genau, was du machen willst:
  • erst soll ein Text eingegeben werden. Dazu hast Du Dir den Scanner angesehen, oder? Was für Methoden kommen da in Frage?
  • beim eingegebenen String soll dann etwas ersetzt werden ….
 
Wichtiger Hinweis: Ein String kann nicht geändert werden Wenn du Replace oder ReplaceAll aufrufst, dann wird ein neuer String als Ergebnis geliefert, das Original bleibt aber unangetastet.
Und jetzt schau dir mal in deinem Code an, was genau du mit dem eingelesenen Text machst. Welchen Text verwendet du beim zweiten Aufruf?

edit: Nvm, hab gerade gesehen, dass du versucht hast, den Scanner zu ändern und nicht den eingelesenen String.

Wie schon so oft gesagt: Stift und Papier (oder Notepad++) zum Mitschreiben, was nach welchem Schritt in welcher Variable steht.
 
Hier noch mal die Links zur Doku. Versuch unbedingt damit zu arbeiten, das ist ein wichtiges Handwerkszeug, mit dem du umgehen können musst.

https://docs.oracle.com/javase/7/docs/api/java/util/Scanner.html#method_summary

Du möchtest mittels Scanner einen String von der Konsole einlesen?

Schau dir die Methoden an, die als Rückgabetyp "String" liefern. Schau dir die Unterschiede (in der Methodenbeschreibung) der einzelnen Methode an.

https://docs.oracle.com/javase/7/docs/api/java/lang/String.html#method_summary

Genauso mit String. Schau dir die Methoden an, die einen String zurückliefern und deren Beschreibung, was sie machen.

Zu deiner Frage
Unter Python kann man einfach mehrfach replace verwenden. Unter Java habe ich noch Nix gefunden.
Wenn eine Methode einen String als Rückgabewert liefert, dann stehen für diesen Rückgabewert wiederum alle Methoden zur Verfügung, die String dir anbietet.
 
Zuletzt bearbeitet:
ok, ohne Scan hab ich es schonmal geschafft


Java:
public class Ersatz_ohne_Scan
{
        public static void main(String args[])
        {
    String texteingabe="3 sc 4 inc";
        String neuer_Text=texteingabe.replace("sc", "fM");
        String neuer_Text1=neuer_Text.replace("inc","Zun");
        System.out.println("Die Übersetzung ist" + neuer_Text1);
        }
}
 
Das lässt sich auch verkürzt schreiben:
Java:
String neuer_Text = texteingabe.replace("sc", "fM").replace("inc","Zun");
Oder auch anders getrennt:
Java:
String neuer_Text = texteingabe
    .replace("sc", "fM")
    .replace("inc","Zun");

Das erste replace() liefert als Ergebnis einen String, auf dem du direkt wieder replace() aufrufst. Dessen Rückgabewert wird dann in der Variablen gespeichert.

Ob diese Schreibweise übersichtlicher ist, musst du im Einzelfall prüfen.
 
Achso: genau so kenne ich es auch von Python. Nach der Lösung hab ich gesucht. 🙂
Aber da ich replaceAll verwendet habe ging es wahrscheinlich nicht ...
EDIT: nein es lag daran das ich das erste Replace mit ; beendet habe
 
Achso: genau so kenne ich es auch von Python. Nach der Lösung hab ich gesucht.
Im Prinzip hast du das schon so gemacht. Du hast halt die Zwischenergebnisse noch mal in Variablen gespeichert. Auch replaceAll() liefert als Rückgabetyp einen String und für diesen stehen alle Methoden zur Verfügung, die die Klasse String anbietet.
 

Neue Themen


Zurück
Oben