Java doppelte Zahl/Zeichen in einem String entfernen

Duardo

Mitglied
Hallo, ich habe einen String der über einen Label dargestellt wird. In diesem String sind Zahlen. Nun möchte ich dass bei Knopfdruck die Zahlen entfernt werden die doppelt oder mehrfach vorkommen. Ist das irgendwie möglich? Schonmal Danke im voraus.
Hier soweit mein Code:

Java:
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.JPanel;


public class test extends JFrame implements ActionListener {
    
    private JPanel panel;
    private JLabel label;
    private JButton ok;
    private String str;
    
    public test() {
        
        panel = new JPanel();
        
        ok = new JButton("OK");
        ok.addActionListener(this);
        
        str = "3323232";
        label = new JLabel(str);
        
        panel.add(ok);
        panel.add(label);
        
        add(panel);
        
        pack();
            setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            setVisible(true);
    
        }

    public static void main(String[] args) {
        new test();
            
    }

    @Override
    public void actionPerformed(ActionEvent arg0) {
    }
}
 
Zuletzt bearbeitet von einem Moderator:
Das klingt nach einem Fall für Regular Expressions. Guck dir die mal an.
Ansonsten gibt es noch Bruteforce in Verbindung mit einem StringBuilder.
 
Das heißt aus "3323232" soll "323232" werden? oder soll das zu "23" werden? werde bitte entwas genauer.
Alles in allem würde ich aber grundsätzlich den String in ein char-Array packen und dort dann drüberlaufen. alles was entfernt werden soll kann dann mit einem bestimmten zeichen wie etwa '_' gesetzt werden. dann daraus wieder nen string und über .replaceAll("_","") alle '_' entfernen.
 
Zu dem was Chloroplast sagte:

Die erste Variante lässt sich mit einem Regex-Replace ziemlich einfach lösen:
/(\d)\1+/gm ersetzen mit \1. Beispiel.

Die zweite Variante ist mit Regex nicht direkt möglich.
 
ich muss zugeben dass ich nicht sooo viel mit regex arbeite, aber ich persönlich finde "/(\d)\1+/gm" ist jetzt nicht der einfachste Regex-ausdruck 😀
Die zweite variante müsste man schon "per hand" machen. also über jedes zeichen rüberlaufen und dann entscheiden. Möglich wäre zeichen für zeichen drüberzugehen, und jedes zeichen das im endstring nicht vorhanden ist das entsprechende zeichen anhängen. Ich denke hier wäre der StingBuilder interessant
 
ich muss zugeben dass ich nicht sooo viel mit regex arbeite, aber ich persönlich finde "/(\d)\1+/gm" ist jetzt nicht der einfachste Regex-ausdruck 😀
Er ist nicht so ganz einfach, das stimmt schon, aber im vergleich zu Regex, die IP-Addressen, E-Mail Addressen oder Kreditkartennummern prüfen ist er noch recht simpel 😀
 
Zuletzt bearbeitet:
Gut, da würde ich dann auch eher dazu neigen das "per hand" zu machen. 😀 Aber ich denke irgentwann werde ich mir das auch noch zu gemüte führen, ist dann warscheinlich einfacher. Reguläre ausdrücke haben ja auch oft die angewohnheit deutlich komplizierter auszusehen als sie eigentlich sind
 

Zurück
Oben