Buchstabe durch seinen Nachfolger ersetzen

ifschleife

Mitglied
In einer Zeichenkette wird jeder Buchstabe durch seinen Nachfolger ersetzt: A → B, B → C, C → D, …, Y → Z, Z → A. Die Methoden, die einen String in einem Rutsch in ein Array of Character und umgekehrt umwandeln, dürfen nicht verwendet werden.
Kann mir jemand weiterhelfen?

Danke im voraus.
 

White_Fox

Top Contributor
Hm...den String in einer For-Schleife durchlaufen, und bei jeder Iteration in drei Teile-linker Teil, einzelnes Zeichen, rechter Teil-zerlegen. Den mittleren String (das einzelne Zeichen) nach Character konvertieren, inkrementieren, und den String wieder zusammenbauen. Überlauf von Z -> A abfangen.

So sollte das eigentlich funktionieren.
 

ifschleife

Mitglied
Hm...den String in einer For-Schleife durchlaufen, und bei jeder Iteration in drei Teile-linker Teil, einzelnes Zeichen, rechter Teil-zerlegen. Den mittleren String (das einzelne Zeichen) nach Character konvertieren, inkrementieren, und den String wieder zusammenbauen. Überlauf von Z -> A abfangen.

So sollte das eigentlich funktionieren.
Bin bei diesem Thema neu, deshalb fehlt mir der Ansatz. Wie würde es syntax technisch aussehen?
 

ocsme

Top Contributor
ist das nicht zu kompliziert gedacht?

Java:
String test = "ABCDE";
        String output = "";
        for(int i=0;i<test.length();i++) {
            char tmp = test.charAt(i);
            output+=(char) (tmp+1);
        }
        System.out.println(output);

Natürlich fehlen hier noch einiges :) aber denke so sollte das erlaubt sein!

LG
 

White_Fox

Top Contributor
Ja, das ist einfacher, hatte die Methode nicht auf dem Schirm.

Aber jetzt hast du ihm die Hausaufgabe gemacht und den Lerneffekt versaut.
 

White_Fox

Top Contributor
Des weiteren finde ich lernt man auch etwas wenn man sich Code von anderen anschaut ;)
Hm...ich weiß nicht. Man kann durchaus von anderer Leute Arbeit lernen, das kommt aber ganz auf die individuelle Lerneinstellung an. Damit sammelt man Wissen, jedoch kaum Erkenntnis. Gerade letztere halte ich gerade am Anfang jedoch für wichtiger. Die Methode charAt() hätte man (auf jedenfall der TS) gleich gefunden, wenn man mal geschaut hätte was die IDE einem bei String für Methoden anbietet. (Wie man sieht, habe ich das auch nicht gemacht ;) )
 

ocsme

Top Contributor
White_Fox da gebe ich dir recht :) Leider schaue ich auch zu wenig in die APIs :(
Warten wir einfach ab was if_schleife meint vielleicht ist es ja auch falsch :p
Also ich habe immer etwas davon wenn jemand eine Lösung Postet oder ich mir Lösungen an schaue :) denoch gebe ich dir weiterhin recht das nächste mal anders :p
 

ifschleife

Mitglied
Danke euch beiden für die Hilfe. @oscme ja es ist bissl ärgerlich wenn man die Lösung vorkriegt, ich werde mit intensiv damit auseinandersetzen um es wirklich zu verstehen.
 

ifschleife

Mitglied
Was mir jetzt noch fehlt ist, dies so zu machen, dass es bei einer Eingabe die Zeichenkette ausgibt, also bei "Julius Caesar" sollte "Kvmjvt Dbftbs" rauskommen. Ich werde das mal versuchen.
 

ifschleife

Mitglied
So ich habe das mit der Eingabe hinzugefügt. Wenn ich Julius Caeser eingebe kommt nur Kvmjvt , also das Leerzeichen wird garnicht beachtet und die darauffolgende Zeichen auch nicht.
Code:
import java.util.Scanner;

public class Zeichenkette {

    public static void main(String[] args) {
        
        String test = "";
        String output = "";
        
        System.out.println("Geben sie Buchstaben ein: ");
        Scanner in = new Scanner(System.in);                    // Eingabegerät hinzufügen
        test = in.next();   
    
        for(int i=0;i<test.length();i++) {
            char tmp = test.charAt(i);
            output+=(char) (tmp+1);
        }
        System.out.println(output);

    
    }

}
 

Robat

Top Contributor
Nun ja .. jeder char kann ja durch eine Zahl repräsentiert werden (siehe ASCII-Tabelle ). Das ist ja überhaupt der Grund, warum du einfach +1 addieren kannst. Schau dir die Tabelle mal genau an (bei zB SP = space = Leerzeichen) und überleg warum ! ausgegeben wird. Das gleiche bei Z/z
 

White_Fox

Top Contributor
Ein Zeichen ist für den Computer nur eine Zahl. Es gibt eine Tabelle, welcher Zahl welches Zeichen zugeordnet ist. Wenn du die Zahl immer weiter inkrementierst, dann kommen irgendwann auch andere Zeichen als Buchstaben.
 

ifschleife

Mitglied
Nun ja .. jeder char kann ja durch eine Zahl repräsentiert werden (siehe ASCII-Tabelle ). Das ist ja überhaupt der Grund, warum du einfach +1 addieren kannst. Schau dir die Tabelle mal genau an (bei zB SP = space = Leerzeichen) und überleg warum ! ausgegeben wird. Das gleiche bei Z/z
Ein Zeichen ist für den Computer nur eine Zahl. Es gibt eine Tabelle, welcher Zahl welches Zeichen zugeordnet ist. Wenn du die Zahl immer weiter inkrementierst, dann kommen irgendwann auch andere Zeichen als Buchstaben.
Ja, ich habe die Tabelle gefunden. Ich schätze mal, dass ich die beiden einzelnd abfragen muss evt. mit if-Abfrage.
 

ifschleife

Mitglied
Ich habe es hinbekommen, dass es bei einer Eingabe von "z" eine "a" ausgibt und bei einem Leerzeichen auch ein Leerzeichen ausgibt.
Nun ist es so, dass es zusätzlich noch das nächste Zeichen ausgibt also bei "z" gibt es "a" und "{" aus. Wahrscheinlich hat es was mit dem +1 zu tun?
Code:
        for(int i=0;i<test.length();i++) {
            
            if(test.charAt(i) == ' ') {
                output+=(char) (' ');
                
            }
            if(test.charAt(i) == 'z') {
                output+=(char) ('a');
            }
            char tmp = test.charAt(i);
            output+=(char) (tmp+1);
            

        }
 

White_Fox

Top Contributor
Besser wäre, du sortierst erstmal ALLE Zeichen aus, die du unangetastet lassen willst.

Edit: Ungefähr so:
Java:
if((c >= a && c <= z) || (c >= a && c <= z)){
    //increment and handle overflow
}
 
Zuletzt bearbeitet:

ocsme

Top Contributor
if((c >= a && c <= z) || (c >= a && c <= z)){ //increment and handle overflow }

du meintest sicherlich:
Java:
if((c >= a && c <= z) || (c >= A && c <= Z)){
    //increment and handle overflow
}

Das ganze meinte ich ja was oben bei meinem Code noch fehlen würde :)
Freut mich aber immer wieder wie nett man hier geholfen bekommt :) "macht bitte alle weiter so" :)

LG
 

ifschleife

Mitglied
Besser wäre, du sortierst erstmal ALLE Zeichen aus, die du unangetastet lassen willst.

Edit: Ungefähr so:
Java:
if((c >= a && c <= z) || (c >= a && c <= z)){
    //increment and handle overflow
}
du meintest sicherlich:
Java:
if((c >= a && c <= z) || (c >= A && c <= Z)){
    //increment and handle overflow
}

Das ganze meinte ich ja was oben bei meinem Code noch fehlen würde :)
Freut mich aber immer wieder wie nett man hier geholfen bekommt :) "macht bitte alle weiter so" :)

LG
Hey, erstmal danke für euer Beiträge. Ich weiß, ich nerve :/. Ich habe das mit der if-Abfrage probiert.
Eclipse sagt, dass es sich bei der if-Abfrage um einen "dead code" handelt,
Desweiteren wird bei der Abfrage sortiert welche Zeichen man nicht anfassen will. ?!
Wie kriege ich es mit dem Overflow hin. Also , nach einem "z" soll ein "a" ausgegeben werden und nach einem
Leerzeichen, ein Leerzeichen ausgeben. Ich hatte ja vorher versucht die einzelnen Zeichen, also "z" und Leerzeichen abzufragen und
und das entsprechende Zeichen auszugeben, was ja nur teilweise geklappt hat.
Code:
        String test = "";
        String output = "";
        
        System.out.println("Geben sie Buchstaben ein: ");
        Scanner in = new Scanner(System.in);                    // Eingabegerät hinzufügen
        test = in.nextLine();   
    
        for(int i=0;i<test.length();i++) {
            
            if(('c' >= 'a' && 'c' <= 'z') || ('c' >= 'A' && 'c' <= 'Z')){         
                char tmp = test.charAt(i);
                output+=(char) (tmp+1);
            }

        }   
        System.out.println(output);
 

White_Fox

Top Contributor
@ocsme
Jup...das meinte ich.

@ifschleife
Versuche mal, etwas vom Code wegzukommen. Lerne zu abstrahieren und dein Problem erstmal in Pseudocode zu formulieren. Du willst Java lenen. Aber Programmieren zu können und eine Programmiersprache zu können sind zwei völlig verschiedene Dinge, und die echte Kunst ist ersteres. Längst nicht jeder beherrscht diese, egal wieviele Programmiersprachen er kennt (oder zu kennen meint).

Daher: Du hast genau zwei Mengen von Zeichen: Die Menge der Zeichen, die inkrementiert werden soll und die Menge der Zeichen, die du nicht anrühren willst.

Was du machen könntest (beachte den Konjunktiv!):
Für jeden einzelnen, in der Zeichentabelle vorkommenden, Eintrag eine eigene If-Abfrage schreiben. If(c == 'a')...; If(c == 'b')...
Beachte dabei, daß du diese If-Abfragen nicht nur für lateinische Buchstaben, Zahlen und die gängigen Sonderzeichen beachten müßtest. Das wäre zwar schon viel, aber dann kämen noch das griechische und das kyrillische Alphabet hinzu. Außerdem das arabische, jüdische, sowie die verschiedenen chinesischen und japanischen Alphabete hinzu. Plus das, was der UTF16-Standard sonst noch so bereithält.

Es würde theoretisch zwar gehen, aber du würdest einen riesigen, unüberschaubaren Codewust produzieren. (Wobei mich an dieser Stelle interessieren würde, ob die JVM daß auch so langwierig ausführen würde oder das clever optimiert. Egal, andere Baustelle.)
Im Prinzip ist das, was ich im vorherigen Absatz geschrieben habe, jedoch genau das was du mit der einzelnen Leerzeichenabfrage im Post weiter oben gemacht hast. Versuche mal, dein Problem verbal zu lösen. So ganz ohne Javacode.
 

ocsme

Top Contributor
Ich weiß, ich nerve :/
NEIN du Nervst nicht!!!
Das ist vollkommen normal beim Anfang. Das große Problem ist wie White_Fox schon sagte, man muss erst einmal versuchen das Problem abstrahieren zu können.

Versuch es nochmal und Poste so oft du willst hier dein voran kommen :)

So aber bevor der/die ifschleife jetzt verzweifelt, schau mal im Thema hier auf Seite 1 ganz unten hast du einen netten Code geschrieben mit deinem Leerzeichen etc. das setze mit dem von White_Fox zusammen dann sollte es klappen :)

LG
 

ifschleife

Mitglied
So ich glaube ich habe es hingekriegt.
Code:
import java.util.Scanner;

public class Test {

    public static void main(String[] args) {
        
        String test = "";
        String output = "";
        char tmp = 0;
        
        System.out.println("Geben sie Buchstaben ein: ");
        Scanner in = new Scanner(System.in);                    // Eingabegerät hinzufügen
        test = in.nextLine();   
    
        for(int i=0;i<test.length();i++) {
            tmp = test.charAt(i);
            
            if(tmp == ' ') {
                output+=(char) (' ');
                
            }
            if(tmp == 'z') {
                output+=(char) ('a');
            }
            if(tmp != ' ' && tmp != 'z') {
            
            output+=(char) (tmp+1);
            }

        }
        System.out.println(output);
    }
}
Danke für euren Support . Ihr seid cool :)
 

ifschleife

Mitglied
Das kannst du dir sparen es so zu schreiben.
Einfach so:
Code:
output+=" "

Habe das Programm von dir noch nicht ausprobiert aber fehlt da nicht noch die Abfrage nach dem großen Z.
Was kommt denn nach dem großen Z ist da nicht auch ein Sonderzeichen?

LG
Das mit dem großen Z habe ich nachträglich gemacht und danke für den Tipp

LG
 

Los

Neues Mitglied
Hey, erstmal danke für euer Beiträge. Ich weiß, ich nerve :/. Ich habe das mit der if-Abfrage probiert.
Eclipse sagt, dass es sich bei der if-Abfrage um einen "dead code" handelt,
Desweiteren wird bei der Abfrage sortiert welche Zeichen man nicht anfassen will. ?!
Wie kriege ich es mit dem Overflow hin. Also , nach einem "z" soll ein "a" ausgegeben werden und nach einem
Leerzeichen, ein Leerzeichen ausgeben. Ich hatte ja vorher versucht die einzelnen Zeichen, also "z" und Leerzeichen abzufragen und
und das entsprechende Zeichen auszugeben, was ja nur teilweise geklappt hat.
Code:
        String test = "";
        String output = "";
       
        System.out.println("Geben sie Buchstaben ein: ");
        Scanner in = new Scanner(System.in);                    // Eingabegerät hinzufügen
        test = in.nextLine();  
   
        for(int i=0;i<test.length();i++) {
           
            if(('c' >= 'a' && 'c' <= 'z') || ('c' >= 'A' && 'c' <= 'Z')){        
                char tmp = test.charAt(i);
                output+=(char) (tmp+1);
            }

        }  
        System.out.println(output);
hallo
if(('c' >= 'a' && 'c' <= 'z') || ('c' >= 'A' && 'c' <= 'Z'))
was meinen sie hier ?
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
Kiki01 Häufigster Buchstabe lässt sich nicht ermitteln Allgemeine Java-Themen 30
The Pi Wie oft wird ein Buchstabe in einem Wort wiederholt? Allgemeine Java-Themen 16
Tacofan Hangman wo sitzt der Buchstabe Allgemeine Java-Themen 8
J Bestimmter Buchstabe = bestimmte Zahl Allgemeine Java-Themen 10
H Buchstabe in String finden Allgemeine Java-Themen 3
V Java-Codierungsherausforderung: Navigieren durch die Macken der Datumsmanipulation Allgemeine Java-Themen 2
H Dienst durch ssh forwarding absichern? Allgemeine Java-Themen 15
M Klasse durch Klassen Aufteilung verbessern, aber wo? Allgemeine Java-Themen 1
M Kein Scanner Fehler durch falsche EIngabe Allgemeine Java-Themen 4
P Karate API Test läuft nicht durch . initializationError Allgemeine Java-Themen 21
Y Wie bekomme ich durch getImage an das Image heran? Allgemeine Java-Themen 1
T Meine Frage lautet wie ich 2 CSV Dateien miteinander in Java verbinde und Spalten die zueinander gehören durch den gleichen Key zusammen ausgebe? Allgemeine Java-Themen 5
W Java Telegram Bot - Eingabe durch User Allgemeine Java-Themen 2
Drachenbauer Wie kann ich das Wort "concrete" in einem String durch ein anderes Wort ersetzen lassen? Allgemeine Java-Themen 5
M Jdeps-Error durch multi-release Allgemeine Java-Themen 6
J Reflection Aufruf: .class durch .dll ersetzen Allgemeine Java-Themen 4
mrbig2017 Threads wait wird nicht durch notify beendet! Allgemeine Java-Themen 3
C OpenCl Setup und durch JavaCode ansteuern Allgemeine Java-Themen 17
J Erste Schritte Datenspeicherung durch Java Allgemeine Java-Themen 6
M Hässliche Schrift auf Graphics durch deriveFont Allgemeine Java-Themen 0
R Variable durch mehrere Methoden ändern und nutzen Allgemeine Java-Themen 17
Aruetiise Interface Position durch JButton ermitteln Allgemeine Java-Themen 5
K Jar/DLL Abhängigkeiten durch User angeben lassen Allgemeine Java-Themen 6
4 Swing Durch klicken auf Button Labels einem Panel hinzufügen Allgemeine Java-Themen 4
R Rückgabe eines Arrays durch Funktion Allgemeine Java-Themen 9
T AWT AWT-EventQueue-0 Null_Pointer_Exception durch Variable Allgemeine Java-Themen 12
RalleYTN Problem bei Schleife die durch einen 2D raum iterieren soll Allgemeine Java-Themen 1
C Durch klicken von Button in GUI wird leeres Fenster geöffnet und nicht mein Spiel "Memory" Allgemeine Java-Themen 13
T Quadrieren einer Zahl nur durch Addition Allgemeine Java-Themen 5
L Vererbung If-Else ersetzen durch was? Allgemeine Java-Themen 20
K OOP OOP Gui Spiel + Vererbungen Probleme durch Nichtwissen!! Allgemeine Java-Themen 1
I CountDown wird durch JOptionPane unterbrochen Allgemeine Java-Themen 11
F JTable mit Zellen die sich durch andere Eingaben füllen Allgemeine Java-Themen 1
B Counting Sort (Sortieren durch Zählen) Allgemeine Java-Themen 13
Z Durch Bäume iterieren Allgemeine Java-Themen 3
M Unterbrechnung durch Echtzeitbefehle? Allgemeine Java-Themen 4
G Suchweg durch Binärbaum speichern Allgemeine Java-Themen 4
L Label- & Textfelderzeugung durch Button Allgemeine Java-Themen 1
S RandomAccessFile durch bytearrayinputstream ersetzen Allgemeine Java-Themen 4
H Java Leistungssteigerung durch Code Anpassung Allgemeine Java-Themen 5
H Optimierung durch Threads Allgemeine Java-Themen 31
S JTable: Model durch ein anderes ersetzen Allgemeine Java-Themen 2
P Variablen Auf durch for-Schleife generierte JComboBox zugreifen Allgemeine Java-Themen 3
T Code durch eigenes Frame pausieren (ähnlich JDialog) Allgemeine Java-Themen 4
F Live Ticker durch Screenshots Allgemeine Java-Themen 22
C Hex Zeichen ersetzen durch leer Zeichen Allgemeine Java-Themen 5
M Verschlüsselung von Text und Files durch RSA (Encoding Problem) Allgemeine Java-Themen 7
N Algorithmus durch Workflow Allgemeine Java-Themen 7
R Windows-Firewall lässt Java nicht durch Allgemeine Java-Themen 17
E Oracle kann durch 0 teilen !?! Allgemeine Java-Themen 7
E NetBeans Vector durch ArrayList ersetzen Allgemeine Java-Themen 4
J Java Datei durch Java Datei öffnen Allgemeine Java-Themen 16
M Arraynamen durch Variable festlegen lassen Allgemeine Java-Themen 5
R Implementierung eines Interface durch 2 verschiedene Klassen Allgemeine Java-Themen 6
S Bildaufbau durch Servlet -> Exception Allgemeine Java-Themen 11
F Slash durch Systembezogenen Fileseparator ersetzen Allgemeine Java-Themen 18
P JFormattedTextField für durch Semikolon getrennte Integer-Werte gesucht / Regulärer Ausdruck Allgemeine Java-Themen 3
M Eclipse drei slashs durch zwei ersetzen? Allgemeine Java-Themen 3
D Updaten von Klassen durch jar.exe zerstört diese. Update durch WinRAR gelingt! Allgemeine Java-Themen 2
A SWT Ausgabetext Shellscript durch Java Allgemeine Java-Themen 8
Ark Array durch Interface ersetzen Allgemeine Java-Themen 7
K Objekt einer konkreten Implementierung eines Interfaces durch übergebenen String Allgemeine Java-Themen 2
fastjack Hardwareinformationen durch Java auslesen Allgemeine Java-Themen 7
S durch Code steppen Allgemeine Java-Themen 7
E Durch System.in.read() blockierten Thread stoppen Allgemeine Java-Themen 10
M eigene Klasse durch Composition mit java.io.File erweitern Allgemeine Java-Themen 3
C Markierung durch Maus lesen Allgemeine Java-Themen 9
T Synchronisation von Listen bei Zugriffen durch mehrere Prozesse Allgemeine Java-Themen 15
N Scanner läuft nicht durch Allgemeine Java-Themen 2
F kamera auslösen durch Programm Allgemeine Java-Themen 17
M Maus durch JavaProgramm bewegen Allgemeine Java-Themen 2
Dissi Itext - Anordnung von Elementen durch PDF Writer Allgemeine Java-Themen 2
N Casten durch generic vermeiden ?? Allgemeine Java-Themen 10
H Performancegewinn durch Mehrfachobjeknutzung Allgemeine Java-Themen 3
N Fehler abfang läuft doppelt durch Allgemeine Java-Themen 2
H Performance Vorteil durch Wechsel der JVM? Allgemeine Java-Themen 6
G String.replaceall - mehrere Zeichen durch eines ersetzen Allgemeine Java-Themen 5
S Testen einer Anwendung durch klicken von Koordinaten Allgemeine Java-Themen 7
N int[] eindeutig durch eine Zahl repräsentieren Allgemeine Java-Themen 12
GilbertGrape Durch JDK debuggen Allgemeine Java-Themen 2
Q Objekte durch Reflection erzeugen Allgemeine Java-Themen 18
Chris81T Performance Problem durch mehrfaches Starten eines JAVA Prog Allgemeine Java-Themen 8
G Schleife durch Button beenden Allgemeine Java-Themen 6
royale Breitendurchlauf / Dijkstra durch Graph, vereinfacht Allgemeine Java-Themen 3
Hawkes Beschädigte Tarballs durch JavaTar Allgemeine Java-Themen 2
X Status Anzeige-durch Thread? Allgemeine Java-Themen 15
4 ich steige einfach nicht durch Allgemeine Java-Themen 5
P Thread Demonstrationr eist durch die Zeit Allgemeine Java-Themen 4
D erstellung einer seitenlangen xml durch ireport Allgemeine Java-Themen 3
R Jar-File vom Linux Desktop durch ancklicken starten? Allgemeine Java-Themen 5
M Java Programm durch Datei Öffnen Allgemeine Java-Themen 6
J IOException durch BufferedWriter.flush() ? Allgemeine Java-Themen 5
J Name eines Strings durch einen String festlegbar? Allgemeine Java-Themen 2
J Endlosschleife durch wechselseitigen Zugriff zweier Klassen? Allgemeine Java-Themen 2
J Zweidimensionales Array durch ZwischenArray ersetzen Allgemeine Java-Themen 3
T TreeMap durch Comparator mit Generics sortieren Allgemeine Java-Themen 9
J Chars in einem String durch "nichts" ersetzen Allgemeine Java-Themen 3
C Dateien auf Festplatte speichern durch "Durchsuchen-But Allgemeine Java-Themen 3
B VK_? << durch char rausbekommen Allgemeine Java-Themen 8
K Programm durch Tastendruck beenden Allgemeine Java-Themen 4

Ähnliche Java Themen

Neue Themen


Oben