Verschieben von Buchstaben in einem String um vorgegebene Anzahl von Zeichen innerhalb eines weiteren String

J

Jakonfire

Mitglied
Dem Programm werden zwei Strings übergeben. Der erste "alphabet" ist der String in dem später die im zweiten String "zeichenfolge" stehenden Zeichen verschoben werden, jeweils um den in "verschiebung" übergebenen Wert. Funktioniert leider aber nicht, vielleicht kann jemand helfen.

Fehlermeldung: Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: 15

Als Bsp.: alphabet: "01234567890+-*/"
zeichenfoolge: "2 * 21 = 42"
verschiebung: 3

erwartete Ausgabe: "5 1 54 = 75"

Java:
public class Verschiebung {
    public static void main(String[] args) {
        String alphabet = args[0];
        String zeichenfolge = args[1];
        int verschiebung = Integer.parseInt(args[2]);
        int length = zeichenfolge.length();
        int length2 = alphabet.length();
        int vorne = 0; 
        int vorne2 = 0; 
        int hinten = length -1;
        int hinten2 = length2 -1; 
        
        String ausgabe1 = "";
        
    while (hinten > vorne){
        char zeichen = zeichenfolge.charAt(vorne++);
        while (hinten2 > vorne){
            char stelle = alphabet.charAt(vorne2++);
            if (zeichen == stelle){
                ausgabe1 = ausgabe1 + alphabet.charAt((vorne+verschiebung)); 
            }
            else{
            ausgabe1 = ausgabe1 + (char)zeichen;
            }
        }

    }
    System.out.println(ausgabe1);  
    }
}
 
Kirby.exe

Kirby.exe

Top Contributor
Diese wird auftreten, wenn du das Zeichen „*“ betrachtest. Hier musst du, wenn du am Ende deines Alphabets Strings angekommen bist, wieder an den Anfang springen ;)
 
Kirby.exe

Kirby.exe

Top Contributor
Also eigentlich musst du folgendes machen:

Du iterierst über deinen zweiten String. Für jedes Zeichen suchst du den Index des betrachteten Zeichens in deinem Alphabet String. Nun gehst du zwei Stellen weiter. Hier gibt es Sonderfälle die du abfangen musst. Ein Beispiel:

Du befindest dich genau am Ende deines Alphabets (somit length()-1) und willst zwei Stellen weiter, dann müsstest du wieder sn den Anfang deines Alphabetsstring springen.
 
J

Jakonfire

Mitglied
Also eigentlich musst du folgendes machen:

Du iterierst über deinen zweiten String. Für jedes Zeichen suchst du den Index des betrachteten Zeichens in deinem Alphabet String. Nun gehst du zwei Stellen weiter. Hier gibt es Sonderfälle die du abfangen musst. Ein Beispiel:

Du befindest dich genau am Ende deines Alphabets (somit length()-1) und willst zwei Stellen weiter, dann müsstest du wieder sn den Anfang deines Alphabetsstring springen.
Ich habe das ganze noch mal komplett neu geschrieben und jetzt wird auch erkannt an welcher Stelle der Buchstabe steht nur bricht es jetzt nach dem ersten korrekt ausgegebenem Zeichen bei dem folgenden das nicht enthalten ist ab und gibt Fehlermeldung aus: Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: 32

Java:
public class Verschiebung {
    public static void main(String[] args) {
        String alphabet = args[0];
        String zeichenfolge = args[1];
        int verschiebung = Integer.parseInt(args[2]);
        int position = 0;
        int length = zeichenfolge.length();
        int length2 = alphabet.length();
        boolean enthalten = false; 
    
    for (int i = 0; i < length; i++){
        char zeichen = zeichenfolge.charAt(i);

            for (int j = 0; j < length2; j++){
            
                if (zeichen == alphabet.charAt(j)){
                enthalten = true;
                position = j;
                break;   
                }
                else {
                enthalten = false;     
                }
            }
        if (enthalten == true){
            System.out.print(alphabet.charAt(position+verschiebung));
            }
        if (enthalten == false){
            System.out.print(alphabet.charAt(zeichen));
            }   
    }   
    }
    
}
 
Kirby.exe

Kirby.exe

Top Contributor
Naja wenn du position+verschiebung tritt das auf, da du nicht berücksichtigst, dass das Zeichen am ende des Alphabets ist ;) wenn index = length()-1 dann musst du wieder bei index = 0 anfangen ;)
 
J

Jakonfire

Mitglied
Naja wenn du position+verschiebung tritt das auf, da du nicht berücksichtigst, dass das Zeichen am ende des Alphabets ist ;) wenn index = length()-1 dann musst du wieder bei index = 0 anfangen ;)
Aber nur bei der Berechnung oder? Also wenn der Index des errechneten Zeichens die länge überschreitet muss ich die länge des strings abziehen um wieder am korrekten Index zu sein?
 
J

Jakonfire

Mitglied
Funktioniert fast. Ausgabe: 515475
Erwartet: 5 1 54 = 75

Edit: Auch so gibt er leider nicht die nicht enthaltenen Zeichen aus
if (enthalten != true){
System.out.print(zeichenfolge.charAt(i));
}

Java:
public class Verschiebung {
    public static void main(String[] args) {
        String alphabet = args[0];
        String zeichenfolge = args[1];
        int verschiebung = Integer.parseInt(args[2]);
        int position = 0;
        int length = zeichenfolge.length();
        int length2 = alphabet.length();
        boolean enthalten = false;
   
    for (int i = 0; i < length; i++){
        char zeichen = zeichenfolge.charAt(i);

            for (int j = 0; j < length2; j++){
           
                if (zeichen == alphabet.charAt(j)){
                enthalten = true;
                position = j;
                break;  
                }
                else {
                enthalten = false;    
                }
            }
        if (enthalten == true){
            if ((position+verschiebung) > length2){
            System.out.print(alphabet.charAt(position+verschiebung-length2));
            }
            else {
            System.out.print(alphabet.charAt(position+verschiebung));
            }
        if (enthalten == false){
            System.out.print(alphabet.charAt(zeichen));
            }
        }  
    }  
    }
   
}
 
Zuletzt bearbeitet:
Kirby.exe

Kirby.exe

Top Contributor
Dann musst du Leerzeichen und das „=„ in den String übernehmen und die Berechnung nicht durchführen
 
J

Jakonfire

Mitglied
So jetzt funktioniert es egal welche Zeichen in beiden Strings enthalten. Danke!

Nur ein Testfall möchte nicht:

Arguments: abcdefghijklmnopqrstuvwxyz abcdefghijklmnopqrstuvwxyz 5


Ausgabe: fghijklmnopqrstuvwxyz


Erwartet: fghijklmnopqrstuvwxyzabcde

Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: 26

Java:
public class Verschiebung {
    public static void main(String[] args) {
        String alphabet = args[0];
        String zeichenfolge = args[1];
        int verschiebung = Integer.parseInt(args[2]);
        int position = 0;
        int length = zeichenfolge.length();
        int length2 = alphabet.length();
        boolean enthalten = false;
  
    for (int i = 0; i < length; i++){
        char zeichen = zeichenfolge.charAt(i);

            for (int j = 0; j < length2; j++){
          
                if (zeichen == alphabet.charAt(j)){
                enthalten = true;
                position = j;
                break; 
                }
                else {
                enthalten = false;
                }
            }
        if (enthalten == true){
            int pruefe = position+verschiebung;
            while (pruefe > length2){
            pruefe = pruefe - length2;
            }
            if ((pruefe) <= length2){
            System.out.print(alphabet.charAt(pruefe));
            }
        } 
        if (enthalten != true){
            System.out.print(zeichenfolge.charAt(i));
            }
    } 
    }
  
}
 
Zuletzt bearbeitet:
Kirby.exe

Kirby.exe

Top Contributor
Also erstmal ein kleiner Tipp ;) Lagere Dinge in Methoden aus, dann wird der Code leserlicher und du siehst Fehler schneller ;)

So sollte es funktionieren ;)

Java:
public class Verschiebung {
    
    public static void main(String[] args) {
        
        String alphabet = args[0];
        String zeichenfolge = args[1];
        int verschiebung = Integer.parseInt(args[2]);
        int position = 0;
        int length = zeichenfolge.length();
        int length2 = alphabet.length();
        StringBuilder sb = new StringBuilder();
 
        for (int i = 0; i < length; i++){
            char zeichen = zeichenfolge.charAt(i);
            position = checkAlphabet(alphabet, zeichen);
            if (position != -1){
                int pruefe = position+verschiebung;
                if(pruefe >= length2){
                    pruefe = pruefe - length2;
                }
                if (pruefe < length2){
                    sb.append(alphabet.charAt(pruefe));
                }
            }else{
                sb.append(zeichenfolge.charAt(i));
            }
        }
        System.out.println(sb.toString());
    }
    
    private static int checkAlphabet(String alphabet, char zeichen){
        for (int j = 0; j < alphabet.length(); j++){
              if (zeichen == alphabet.charAt(j)){
                return j;
            }
        }
        return -1;
    }
}
 
Zuletzt bearbeitet:
Bible Man

Bible Man

Mitglied
Hiermit sollte es klappen:
Verschieben:
public class Zeichenkette {
  public static String verschieben(String a, String s, int n) {
    String erg = "";
    // Durchlaufe jeden Character in der Zeichenkette
    for (int i = 0; i < s.length(); ++i) {
      // Berechne nur, wenn der aktuelle Character kein Leerzeichen und kein Gleichheitszeichen ist
      if (s.charAt(i) != ' ' & s.charAt(i) != '=') {
        /*
         * 1) Ermittle Character an Position i in s
         * 2) Ermittle Position des Characters aus s in a
         * 3) Die Verschiebung ergibt den Character in a an Position ((|a| + n) mod |a|)
         */
        erg += a.charAt((a.indexOf(s.charAt(i)) + n) % a.length());
      } else {
        erg += s.charAt(i);
      }
    }
    return erg;
  }
}
 
Zuletzt bearbeitet:
Ähnliche Java Themen
  Titel Forum Antworten Datum
Elyt JFrame in den Hintergrund verschieben Java Basics - Anfänger-Themen 3
OSchriever JFrame-Anwendungsfenster verschieben Java Basics - Anfänger-Themen 15
S Input/Output JLabel verschieben Java Basics - Anfänger-Themen 7
L Files verschieben in einen Ordner Java Basics - Anfänger-Themen 87
L Array Elemente verschieben Java Basics - Anfänger-Themen 5
UnknownInnocent Methoden JLabel erstellen & verschieben Java Basics - Anfänger-Themen 1
H Position verschieben der Elemtente im Array Java Basics - Anfänger-Themen 3
K Einzelne Email verschieben nicht möglich Java Basics - Anfänger-Themen 3
A Dateien Verschieben Java Basics - Anfänger-Themen 1
T Arrayposition um eine Position verschieben Java Basics - Anfänger-Themen 2
B Element in Array nach unten verschieben Java Basics - Anfänger-Themen 11
M Best Practice Verschieben einzelner Spalten eines JTables verhindern Java Basics - Anfänger-Themen 5
B Methoden Element aus einem Array löschen, Rest nach vorne verschieben? Java Basics - Anfänger-Themen 4
M Elemente eines Arrays verschieben Java Basics - Anfänger-Themen 9
K Element in ArrayList löschen ohne Index zu verschieben Java Basics - Anfänger-Themen 2
L Punkt innerhalb eines Bereiches verschieben Java Basics - Anfänger-Themen 9
H Kreis verschieben Java Basics - Anfänger-Themen 10
R Variablen [GELÖST]Elemente in Array um Schrittweite s verschieben Java Basics - Anfänger-Themen 2
J Java Array Zeichnung Skalieren und verschieben Java Basics - Anfänger-Themen 5
S Dateien mit Java verschieben Java Basics - Anfänger-Themen 6
llabusch Fenster per Button verschieben Java Basics - Anfänger-Themen 5
llabusch Fenster um x Pixel verschieben Java Basics - Anfänger-Themen 4
M JButtons verschieben Java Basics - Anfänger-Themen 13
J Array um 1 stelle verschieben Java Basics - Anfänger-Themen 2
B Fehlerhafte XML-Files verschieben Java Basics - Anfänger-Themen 6
T Verschieben Java Basics - Anfänger-Themen 4
B Dateien Verschieben! Java Basics - Anfänger-Themen 8
B ältere Dateien verschieben Java Basics - Anfänger-Themen 3
Q Komma verschieben Java Basics - Anfänger-Themen 5
J Markierte Items in einer JLIST in einen Ordner verschieben Java Basics - Anfänger-Themen 2
W Elemente in einem Array nach 'oben' verschieben Java Basics - Anfänger-Themen 9
N Array inhalte verschieben Java Basics - Anfänger-Themen 12
B Methode in andere Klasse verschieben Java Basics - Anfänger-Themen 9
T JScrollPane: Slider programmgesteuert verschieben? Java Basics - Anfänger-Themen 4
GianaSisters Erste Schritte Datei umbennen bzw verschieben klappt nicht Java Basics - Anfänger-Themen 6
0 Datei verschieben Java Basics - Anfänger-Themen 6
R Verschieben eines Arrays aus Objekten Java Basics - Anfänger-Themen 16
eLogic Datei verschieben Java Basics - Anfänger-Themen 12
M Kommastellen verschieben Java Basics - Anfänger-Themen 4
R Objekt mit Maus auswählen und verschieben Java Basics - Anfänger-Themen 2
L Datei verschieben mit einer Schleife Java Basics - Anfänger-Themen 17
Hamstinator Fenster mit Maus verschieben Java Basics - Anfänger-Themen 2
K Elemente eines Array verschieben Java Basics - Anfänger-Themen 18
U Arry verschieben Java Basics - Anfänger-Themen 2
J Datentypen Array in x Richtungen verschieben Java Basics - Anfänger-Themen 6
E Probleme mit Images verschieben Java Basics - Anfänger-Themen 4
K Punkte verschieben Java Basics - Anfänger-Themen 6
S Grosse Dateien kopieren/Verschieben Java Basics - Anfänger-Themen 14
D denkfehler, bereich verschieben awt Java Basics - Anfänger-Themen 3
D Dateien umbenennen --> verschieben Java Basics - Anfänger-Themen 4
Mike90 verschieben von Buttons, ... Java Basics - Anfänger-Themen 18
D Elemente im Array verschieben Java Basics - Anfänger-Themen 15
M Referenzen verschieben Java Basics - Anfänger-Themen 2
B zahlen verschieben tabelle Java Basics - Anfänger-Themen 2
H Objekt mit Maus verschieben Java Basics - Anfänger-Themen 4
F Größe von Grafik-Containern verschieben Java Basics - Anfänger-Themen 2
J Datei verschieben funktioniert nicht Java Basics - Anfänger-Themen 6
M Verzeichnis verschieben Java Basics - Anfänger-Themen 5
G Ordner überprüfen und Dateien verschieben Java Basics - Anfänger-Themen 3
L Verzeichnisse mit Inhalt verschieben auf UNIX Java Basics - Anfänger-Themen 5
Silas89 Datei verschieben Java Basics - Anfänger-Themen 3
K bestimmte Dateien aus Ordner verschieben Java Basics - Anfänger-Themen 5
X Dateien Verschieben Java Basics - Anfänger-Themen 8
M JList Parameter verschieben Java Basics - Anfänger-Themen 3
M Parameter zwischen zwei JLists verschieben Java Basics - Anfänger-Themen 4
G dateien verschieben Java Basics - Anfänger-Themen 10
D JTable - Verschieben der Spalten deaktivieren <- wie? Java Basics - Anfänger-Themen 5
U BufferedImages verschieben klappt nicht Java Basics - Anfänger-Themen 37
0 Element aus Array löschen andere Elemente verschieben? Java Basics - Anfänger-Themen 7
G Array verschieben Java Basics - Anfänger-Themen 9
R mit MouseDragged Rechteck verschieben. Java Basics - Anfänger-Themen 2
I "File" - je nach änderungsdatum verschieben Java Basics - Anfänger-Themen 5
A MP3-Datei verschieben Java Basics - Anfänger-Themen 6
C Focus fürs Zeichnen verschieben?? Java Basics - Anfänger-Themen 3
A Programm in den Hintergrund "verschieben" Java Basics - Anfänger-Themen 4
F Java Programm, das kleine Buchstaben in einem String zählen soll und bei großen Buchstaben oder Sonderzeichen abbrechen soll. Java Basics - Anfänger-Themen 5
Q Besitzen zwei Strings identische Buchstaben, nur in anderer Reihenfolge? Java Basics - Anfänger-Themen 10
J Buchstabenhäufigkeit mit Array und Ausgabe des häufigsten Buchstaben Java Basics - Anfänger-Themen 25
J Buchstaben aus textArea extrahieren Java Basics - Anfänger-Themen 4
S Buchstaben in Großbuchstaben (Strings) Java Basics - Anfänger-Themen 5
O FilterStream häufigkeit der Buchstaben Java Basics - Anfänger-Themen 43
F Buchstaben in einem String vertauschen (Ohne replace) Java Basics - Anfänger-Themen 10
H Anzahl verschiedener Buchstaben im String Java Basics - Anfänger-Themen 41
A Erste Schritte Buchstaben im Array suchen Java Basics - Anfänger-Themen 8
K String buchstaben auslesen Java Basics - Anfänger-Themen 9
K Probleme beim Programm schreiben - Lesen von Dateiinhalten -zaehlen von Wörtern/ Buchstaben Java Basics - Anfänger-Themen 4
J Für jeden Buchstaben eine Zahl Java Basics - Anfänger-Themen 1
B Wie kann ich die Buchstaben sortieren nach der Höhe der Zahlen Java Basics - Anfänger-Themen 14
Z Ersten Buchstaben eines Elements eines String-Arrays auslesen Java Basics - Anfänger-Themen 5
x-tshainge Zahlen Buchstaben zuordnen Java Basics - Anfänger-Themen 4
T Datentypen char als Buchstaben statt als Zahl ausgeben Java Basics - Anfänger-Themen 4
M replace Methode für Buchstaben Java Basics - Anfänger-Themen 29
L Feld mit beliebiger Anzahl von Buchstaben füllen... Java Basics - Anfänger-Themen 5
J Methoden Eingabe Methode nur Buchstaben Java Basics - Anfänger-Themen 4
I Hilfe beim löschen von Buchstaben. Java Basics - Anfänger-Themen 1
I Hilfe beim löschen schon Buchstaben. Java Basics - Anfänger-Themen 4
DestinatioN Problem beim splitten eines Satzes in Wörter und die Wörter in Buchstaben Java Basics - Anfänger-Themen 2
V char Eingabe aber nur für Buchstaben Java Basics - Anfänger-Themen 4
J Zufällige Buchstaben Java Basics - Anfänger-Themen 45
C Klassen Positionszähler auf Buchstaben setzen Java Basics - Anfänger-Themen 14

Ähnliche Java Themen

Anzeige

Neue Themen


Oben