# Regex + Match Zahlen filtern



## Java4Life (13. Dez 2010)

hi,

ich habe noch eine Frage bezüglich der regex befehle. und zwar habe ich eine txt-datei,wo inhalte wie:

```
[COLOR="Red"]2131241241[/COLOR]
weqe2131de
13123d
qedw123
  rqwr32
[COLOR="Red"]124124[/COLOR]
3124fwe
erw324
```

drinstehen. nun möchte ich gerne mit match und den regex ausdrücken dafür sorgen,dass aus der liste alle "puren" zahlen herausgefiltert werden. also soll dann nur noch das darinstehen:

```
weqe2131de
13123d
qedw123
  rqwr32
3124fwe
erw324
```

hier ein auszug des codes:


```
String zahl= "3252352a";
		
		if (Pattern.matches("[0-9]", zahl) == false) {
			String hier =   zahl.replaceAll("[0-9]", "");
			   System.out.println("outprint:"+hier);
			}
```
leider nicht ganz das, was ich will,da selbst die zahlen davor gelöscht werden:
outprint:a

jemand eine idee?^^ danke schon mal!


----------



## XHelp (13. Dez 2010)

Dein Regex ist ja auch falsch. Probier mal 
	
	
	
	





```
"\\d+"
```
Und warum veränderst du die Zeile? Du willst doch die Zeile 1zu1 übernehmen, wenn es nicht dem Muster entspricht.


----------



## F.S.WhiTeY (13. Dez 2010)

Hi,
du möchtest ja nicht alle zahlen von 0-9 löschen, also mach doch bitte auch kein replaceAll.... denn wenn mann sich replace all übersetzt, bedeutet das "ersetze alle". Wenn du schon eine Zeile hast, schreib sie doch nicht zurück, sondern lösche sie ganz. Das Spart Overhead beim bearbeiten der txt.

Dein Fehler liegt im Pattern. Du testest ob da nur zahlen drin sind --> [0-9]

Dann fragst du ob da False rauskommet.... ähhh.... Da muss False Rauskommen wenn da nen a drin ist !! Schließlich sind es nicht nur Zahlen, sondern auch ein Buchstabe 

Diese Zeile wolltest du aber behalten oder? Weil es keine Reine Zahl ist.. oder habe ich das missverstanden ?

Wenn nein : Dann teste im Kopf der IF-Abfrage auf == true !  

Tipp:

Eine IF-Abfrage reagiert auf ergebnisse einer Methode, daher brauchst du bei einer Methode die Boolsche werte liefert nicht mit == testen..


```
//wenn true rauskommen soll
if( klasse.methode){
....
{
//wenn false rauskommen soll ! == Verneinen
if( !klasse.methode ){
....
}
```

Für deine Methode Bedeutet dass:


```
String zahl= "3252352a";
		
		if ( Pattern.matches("[0-9]", zahl) ) {

			      //Warum einen Neuen String anlegen? einer reicht doch .... 
                              zahl =   zahl.replaceAll("[0-9]", "");
			  
                            System.out.println("Dies war eine Reine Zahl, sie wurde gelöscht!");
                           
			}else{
                                 System.out.println("Mischung gefunden, der String lautet:"+" " +zahl);        
                               }
```


Liebe Grüße

WhiTeY


----------



## F.S.WhiTeY (13. Dez 2010)

XHelp hat gesagt.:


> Dein Regex ist ja auch falsch. Probier mal
> 
> 
> 
> ...



Das hatte ich ganz übersehen. Zur erklärung : \\d ist das selbe wie [0-9], allerdings ist es richtig das wir eine oder belibig viele Ziffern haben wollen. Daher ist \\d+ oder [0-9]+ richtig.

LG


----------



## XHelp (13. Dez 2010)

Wenn wir schon bei kleinigkeiten sind:
String kannst du auch so auf Muster überprüfen:

```
String s = "123456";
System.out.println(s.matches("\\d+"));
```


----------



## Java4Life (14. Dez 2010)

danke leute!

@WhiTeY ja,wahrscheinlich war es gestern schon zu spät für mich ^^ mit dem true hätte ich natürlich selber darauf kommen können...

ich glaube an der stelle war ich gestern auch ein bisschen verwirrt, weil bei true nichts geprinted wurde -is ja auch logisch warum nicht xD

dann nochmal vielen dank!

thread close ich mal


----------

