Strings ersetzen

Jinnai4

Mitglied
Hallo !
Brauche bitte wieder mal Unterstützung 😀

Suche jetzt schon seit einiger Zeit im Internet nach einer Möglichkeit Buchstaben bzw Strings zu ersetzen.
Zum Beispiel: Im Quelltext wird "a b c d" eingegeben, nun sollen diese Buchstaben mit "e f g h"
ersetzt werden.
Habe zwar eine Möglichkeit gefunden, aber diese erscheint mir irgendwie als hätte ich das über Umwege gelöst.
Außerdem funktioniert das nicht so wie geplant, da die gewechselten Buchstaben erneut getauscht werden (siehe "a").
Gibt es da eine einfachere Möglichkeit und wie kann ich dieses Problem bitte beheben?
Vielen Dank
Code:
package at.jinnai;

import java.util.Calendar;
import java.util.GregorianCalendar;

import javax.swing.JOptionPane;

public class Selena extends Fenster {

   
    private static final long serialVersionUID = 1L;

    public static void main(String[] args) {
       
       
        GregorianCalendar cal = new GregorianCalendar();

        int versuche = 3;
        int min = cal.get(Calendar.MINUTE);
        int hour = cal.get(Calendar.HOUR_OF_DAY);
        int pw = min * hour;
        String pws = Integer.toString(pw);

        do {

            String Passwort = JOptionPane.showInputDialog(null, "Bitte Passwort eingeben!\nVersuche:" + versuche);

            if (Passwort == null) {
                System.exit(0);
            }

            else if (Passwort.equals(pws)) {
                JOptionPane.showMessageDialog(null, "Danke, das Passwort ist korrekt.");
                new Fenster();
                break;
            }

            else {
                versuche--;
                JOptionPane.showMessageDialog(null, "Falsches Passwort!");
            }

        }

        while (versuche > 0);

        if (versuche == 0) {
            JOptionPane.showMessageDialog(null, "Falsches Passwort!\nKeine restlichen Versuche!");
            System.exit(0);
        }

    }

}

Code:
package at.jinnai;

import java.awt.Container;
import java.awt.Dimension;
import java.awt.Toolkit;
import java.awt.datatransfer.StringSelection;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JOptionPane;
import javax.swing.JTextArea;

public class Fenster extends javax.swing.JFrame implements ActionListener {

    private static final long serialVersionUID = 1L;

    private Toolkit t;
    private int x = 0, y = 0, width = 900, height = 700;
    private JTextArea eingabe = new JTextArea();
    private JTextArea ausgabe = new JTextArea();
    private JLabel Leingabe = new JLabel("Quelltext");
    private JLabel Lausgabe = new JLabel("Ausgabe");
    private JButton umwandeln = new JButton("Chiffrieren");
    private JButton loeschen = new JButton("Löschen");
    private JButton kopieren = new JButton("Kopieren");
    private JMenuBar bar1;
    private JMenu bar1_menu1;
    private JMenuItem bar1_menu1_menuitem1;

    private void initComponents()

    {
        this.getContentPane().setLayout(null);

        this.bar1 = new JMenuBar();

        this.bar1_menu1 = new JMenu("Ansicht");
        this.bar1_menu1_menuitem1 = new JMenuItem("Entwickler");
        this.setJMenuBar(this.bar1);

        this.bar1_menu1.add(this.bar1_menu1_menuitem1);
        this.bar1.add(this.bar1_menu1);
    }

    public Fenster() {

        Container cp = getContentPane();
        cp.setLayout(null);
        setVisible(true);

        t = Toolkit.getDefaultToolkit();

        Dimension d = t.getScreenSize();
        x = (int) ((d.getWidth() - width) / 2);
        y = (int) ((d.getHeight() - height) / 2);

        setTitle("Selena");
        setBounds(x, y, width, height);

        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        this.initComponents();
        this.initListeners();

        Leingabe.setBounds(150, 10, 160, 15);
        eingabe.setBounds(150, 27, 600, 200);
        Lausgabe.setBounds(150, 280, 160, 15);
        ausgabe.setBounds(150, 297, 600, 200);
        kopieren.setBounds(300, 580, 150, 20);
        loeschen.setBounds(450, 580, 150, 20);
        umwandeln.setBounds(375, 560, 150, 20);
        cp.add(Leingabe);
        cp.add(eingabe);
        cp.add(Lausgabe);
        cp.add(ausgabe);
        cp.add(umwandeln);
        cp.add(loeschen);
        cp.add(kopieren);
        kopieren.addActionListener(this);
        umwandeln.addActionListener(this);
        loeschen.addActionListener(this);
        ausgabe.setEditable(false);
        setVisible(true);

    }

    private void initListeners() {

        this.bar1_menu1_menuitem1.addActionListener(new ActionListener() {

            public void actionPerformed(ActionEvent e)

            {
                JOptionPane.showMessageDialog(null, " Jakob R. \n August 2017");
            }

        });

    }

    public void actionPerformed(ActionEvent arg0) {

        kopieren.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                Toolkit.getDefaultToolkit().getSystemClipboard().setContents(new StringSelection(ausgabe.getText()),
                        null);
            }
        });
        loeschen.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                eingabe.setText("");
                ausgabe.setText("");
            }
        });
        umwandeln.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {

                String quelle = eingabe.getText();
                String nquelle0 = quelle.replace("a", "v1");
                String nquelle1 = nquelle0.replace("b", "Im");
                String nquelle2 = nquelle1.replace("c", "Fb");
                String nquelle3 = nquelle2.replace("d", "E3");
                String nquelle4 = nquelle3.replace("e", "4e");
                String nquelle5 = nquelle4.replace("f", "aW");
                String nquelle6 = nquelle5.replace("g", "C");
                String nquelle7 = nquelle6.replace("h", "X");
                String nquelle8 = nquelle7.replace("i", "N");
                String nquelle9 = nquelle8.replace("j", "L");
                String nquelle10 = nquelle9.replace("k", "d");
                String nquelle11 = nquelle10.replace("l", "U");
                String nquelle12 = nquelle11.replace("m", "K");
                String nquelle13 = nquelle12.replace("n", "5f");
                String nquelle14 = nquelle13.replace("o", "l");
                String nquelle15 = nquelle14.replace("p", "6q");
                String nquelle16 = nquelle15.replace("q", "z");
                String nquelle17 = nquelle16.replace("r", "D");
                String nquelle18 = nquelle17.replace("s", "n");
                String nquelle19 = nquelle18.replace("t", "u");
                String nquelle20 = nquelle19.replace("u", "2o");
                String nquelle21 = nquelle20.replace("v", "Z");
                String nquelle22 = nquelle21.replace("w", "J");
                String nquelle23 = nquelle22.replace("x", "M");
                String nquelle24 = nquelle23.replace("y", "7s");
                String nquelle25 = nquelle24.replace("z", "8");

                ausgabe.setText(nquelle25);

            }
        });
    }

}
 
verwende einfach replaceAll! 😉
Code:
String text = "a b c d a d x";
        String text1 = text.replaceAll("a", "z");
        text1 = text1.replaceAll("d", "F");
        System.out.println(text1);
 
Danke für die schnelle Antwort !
Den Unterschied zwischen replace und replaceall hab ich eh noch nicht so ganz verstanden.
Habe es jetzt umgeschrieben, aber noch immer dasselbe Problem.
Gebe ich "a" als Quelltext ein kommt statt "v1" "z1" herraus, weil das "v" mit "z" ersetzt wird.
Bräuchte einen Code der die Strings sofort übersetzt, so das getauschte Buchstaben nicht nochmals ersetzt werden.

Code:
    String quelle = eingabe.getText();
                String nquelle = quelle.replace("a", "v1");
                nquelle = nquelle.replaceAll("b", "Im");
                nquelle = nquelle.replaceAll("c", "Fb");
                nquelle = nquelle.replaceAll("d", "E3");
                nquelle = nquelle.replaceAll("e", "4e");
                nquelle = nquelle.replaceAll("f", "aW");
                nquelle = nquelle.replaceAll("g", "C");
                nquelle = nquelle.replaceAll("h", "X");
                nquelle = nquelle.replaceAll("i", "N");
                nquelle = nquelle.replaceAll("j", "L");
                nquelle = nquelle.replaceAll("k", "d");
                nquelle = nquelle.replaceAll("l", "U");
                nquelle = nquelle.replaceAll("m", "K");
                nquelle = nquelle.replaceAll("n", "5f");
                nquelle = nquelle.replaceAll("o", "l");
                nquelle = nquelle.replaceAll("p", "6q");
                nquelle = nquelle.replaceAll("q", "z");
                nquelle = nquelle.replaceAll("r", "D");
                nquelle = nquelle.replaceAll("s", "n");
                nquelle = nquelle.replaceAll("t", "u");
                nquelle = nquelle.replaceAll("u", "2o");
                nquelle = nquelle.replaceAll("v", "Z");
                nquelle = nquelle.replaceAll("w", "J");
                nquelle = nquelle.replaceAll("x", "M");
                nquelle = nquelle.replaceAll("y", "7s");
                nquelle = nquelle.replaceAll("z", "8");

                ausgabe.setText(nquelle);
 
Andere Idee:
Java:
String[] replacements = {"v1", "Im", "Fb", "E3", "4e", "aW", "C", "X", "N", "L", "d", "U", "K", "5f", "l", "6q", "z", "D", "n", "u", "2o", "Z", "J", "M", "7s", "8"};
Map<Character, CharSequence> mapping = new HashMap<>();
for(char c = 'a'; c <= 'z'; c++) {
  mapping.put(c, replacements[c - 'a']);
}
String text = "abcdefg";
StringBuilder builder = new StringBuilder();
for (int i = 0; i < text.length(); i++) {
  char c = text.charAt(i);
  CharSequence replacement = mapping.get(c);
  builder.append(replacement);
}
System.out.println(builder.toString());
 
Vielen Dank !
Hat super funktioniert, allerdings werden die Zwischenräume als "null" angezeigt.
Wollte das mit dem Replace beheben aber das funktioniert warum auch immer nicht.

Code:
        umwandeln.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
               
                String quelle = eingabe.getText().replaceAll(" ", "Y");
               
               
                String[] replacements = {"v1", "Im", "Fb", "E3", "4e", "aW", "C", "X", "N", "L", "d", "U", "K", "5f", "l", "6q", "z", "D", "n", "u", "2o", "Z", "J", "M", "7s", "8"};
                Map<Character, CharSequence> mapping = new HashMap<Character, CharSequence>();
                for(char c = 'a'; c <= 'z'; c++) {
                 mapping.put(c, replacements[c - 'a']);
                }
                String text = quelle;
                StringBuilder builder = new StringBuilder();
                for (int i = 0; i < text.length(); i++) {
                 char c = text.charAt(i);
                 CharSequence replacement = mapping.get(c);
                 builder.append(replacement);
                }
               

                ausgabe.setText(builder.toString());

            }
        }
 
Java:
for (int i = 0; i < text.length(); i++) {
  char c = text.charAt(i);
  if(mapping.containsKey(c)){
    CharSequence replacement = mapping.get(c);
    builder.append(replacement);
  } else {
    builder.append(c);
  }
}
System.out.println(builder.toString());
 
Vielen, vielen Dank!
Jetzt funktioniert alles so wie ich mir das vorgestellt habe:
Code:
public void actionPerformed(ActionEvent e) {

                String quelle = eingabe.getText();


                String[] replacements = { "v1", "Im", "Fb", "E3", "4e", "aW", "C", "X", "N", "L", "d", "U", "K", "5f",
                        "l", "6q", "z", "D", "n", "u", "2o", "Z", "J", "M", "7s", "8" };
                Map<Character, CharSequence> mapping = new HashMap<Character, CharSequence>();
                for (char c = 'a'; c <= 'z'; c++) {
                    mapping.put(c, replacements[c - 'a']);
                }
                String text = quelle;
                StringBuilder builder = new StringBuilder();
               
                   
                    for (int i = 0; i < text.length(); i++) {
                         char c = text.charAt(i);
                         if(mapping.containsKey(c)){
                           CharSequence replacement = mapping.get(c);
                           builder.append(replacement);
                         } else {
                           builder.append(c);
                         }
                        }
                String quelle2 = builder.toString();
                Pattern pattern = Pattern.compile("\\s+");
                Matcher matcher = pattern.matcher(quelle2);
                quelle2 = matcher.replaceAll("Y");

                ausgabe.setText(quelle2);

            }
 

Neue Themen


Zurück
Oben