# Java doppelte Zahl/Zeichen in einem String entfernen



## Duardo (15. Mai 2015)

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:


```
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) {
    }
}
```


----------



## Gucky (15. Mai 2015)

Das klingt nach einem Fall für Regular Expressions. Guck dir die mal an.
Ansonsten gibt es noch Bruteforce in Verbindung mit einem StringBuilder.


----------



## Chloroplast (17. Mai 2015)

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.


----------



## Tobse (17. Mai 2015)

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.


----------



## Chloroplast (18. Mai 2015)

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


----------



## Tobse (18. Mai 2015)

Chloroplast hat gesagt.:


> 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


----------



## Chloroplast (18. Mai 2015)

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


----------

