Warum läst mein replace die Klammern drin?

Thallius

Top Contributor
Hi

ich habe einen String im Format

(0008,0002)

ich möchte nun nur die beiden Hex-Zahlen haben. Das probiere ich so:

Code:
            // first row contains tag in format (0008,0001)
            String[] tags = tagBuffer.get(row).split(",");
            if(tags.length != 2)
            {
                System.out.println("First row of tag is mail formatted.");
                return null;
            }
            // remove all non hex digits
            String groupString = tags[0].replace("/[^A-Fa-f0-9x]/g", "");
            String tagString = tags[1].replace("/[^A-Fa-f0-9x]/g", "");

            System.out.println(groupString+"-"+tagString);

Die Ausgabe ist aber
(0008-0002)

Die Klammern werden also nicht entfernt. Wenn ich den Regex auf einem Tester im Web laufen lasse, werden dieKlammern aber entfernt. Macht ja auch Sinn, da sie nicht in meinem definierten Charset enthalten sind.

Was hat Java hier wieder für eine Besonderheit?

Gruß

Claus
 

mrBrown

Super-Moderator
Mitarbeiter
Du nimmst die falsche Methode, für Regex nutzt man replaceAll oder replaceFirst, replace ersetzt alle "echten" Vorkommen von "/[^A-Fa-f0-9x]/g"

Was sollen denn "/" und "/g"?
 

Thallius

Top Contributor
Sorry kenne das nur von PHP und da kann ich mit /ausdruck/g einen match all definieren.

DAs man in Java da nicht mit arbeiten kann wußte ich nicht. Mit replaceAll funktioniert es dann auch.

Danke

Claus
 

Tobse

Top Contributor
Wenn du schon Regex benutzt, kannst du doch einfach die beiden Zahlen in je eine Gruppe matchen und mit einem javax.pattern.Matcher extrahieren...
 

dzim

Top Contributor
die Slashes und so, sind glaube ich RegExp in Perl-Stil.
Am Besten mal in Java anschauen: https://docs.oracle.com/javase/8/docs/api/java/util/regex/Pattern.html
Hier teste ich immer: http://www.regexplanet.com/advanced/java/index.html

Um einen Match herzustellen, könnte man folgenden RegExp nutzen: \(([0-9a-fA-F]{2,}),([0-9a-fA-F]{2,})\)
dann Pattern#compile("<regexp>") -> pattern#matcher("<string-to-test>") -> und auf dem Matcher die Gruppen (0 ist der Match, also musst du Gruppe 1 und 2 holen) auswerten.

Oder einfacher einen Matcher mit dem Pattern ([0-9a-fA-F]{2,}) erstellen und dann mit einem while-loop über die #finds iterieren - korrekt wäre dann wieder Gruppe 1 auszulesen, aber in dem Fall ist nur eine Gruppe drin, also ginge auch Gruppe 0.
 

Tobse

Top Contributor
Oder einfacher einen Matcher mit dem Pattern ([0-9a-fA-F]{2,}) erstellen und dann mit einem while-loop über die #finds iterieren - korrekt wäre dann wieder Gruppe 1 auszulesen, aber in dem Fall ist nur eine Gruppe drin, also ginge auch Gruppe 0.
Das wird nicht funktionieren, weil der Bindestrich zwischendrin ist.
 

Thallius

Top Contributor
Da es immer nur zwei Zahlen sind ist der Matcher wohl ein wenig mit Kanonen auf Spatzen geschossen. Eigentlich ist es das Regex ja schon. Ich könnte genauso gut mit substr() arbeiten da die Zahlen auch immer 4 Digits lang sind.

Gruß

Claus
 

Viktim

Bekanntes Mitglied
So würds auch gehen :D
Java:
    String groupString = tags[0].replace("/[^A-Fa-f0-9x]/g", "");
    groupString = entferneKlammern(groupString);

    String tagString = tags[1].replace("/[^A-Fa-f0-9x]/g", "");
    tagString = entferneKlammern(tagString);

Java:
private String entferneKlammern(String string) {
    string = string.replaceAll("\\(", "");
    string = string.replaceAll("\\)", "");
    return string;
  }

Ist aber nicht so schön, weil du ja schon deinen Regex hast :D
an sonsten müsstest du das mit Regex-Gruppen machen
 

dzim

Top Contributor
Ah... Ich hab es falsch rum verstanden...
Dann nimm einfach diesen RegExp [0-9a-fA-F,]+ und Gruppe 0.
Oder nutze dein String#replace und füttere es mit dem RegExp [()]
Java:
String s = "(0008,0001)".replace("[()]", "");
// s sollte nun "0008,0001" sein

#edit: das letzte ist allerdings ungetested
 

mrBrown

Super-Moderator
Mitarbeiter
Ah... Ich hab es falsch rum verstanden...
Dann nimm einfach diesen RegExp [0-9a-fA-F,]+ und Gruppe 0.
Oder nutze dein String#replace und füttere es mit dem RegExp [()]
Java:
String s = "(0008,0001)".replace("[()]", "");
// s sollte nun "0008,0001" sein

#edit: das letzte ist allerdings ungetested
replaceAll wäre richtig, um RegEx zu nutzen
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
W 2D-Grafik nach getthumbnail läst sich Quellbild nicht mehr löschen Allgemeine Java-Themen 3
Queenman Interface Mein Microsoft Visual Studio Code zeigt komische Dinge & Menüs an Allgemeine Java-Themen 9
B Wie kann ich mein 8 Klassen Gebilde objektorientierter schreiben? Allgemeine Java-Themen 114
Tiago1234 Warum hängt sich mein Programm auf? Allgemeine Java-Themen 22
J Mein Frame friert ein beim Uploaden Allgemeine Java-Themen 4
Drachenbauer Wie sorge ich dafür, dass mein Spiel die ini-Datei in der Resourcen-ordner des Projektes schreibt? Allgemeine Java-Themen 5
I File ausführen und mein Programm bearbeiten lassen Allgemeine Java-Themen 11
M Brainstorming für mein Projekt Allgemeine Java-Themen 30
R Wo ist mein Fehler in der Methode DRINGEND Allgemeine Java-Themen 9
R Wo ist mein Fehler in diesem Code Allgemeine Java-Themen 7
M Suche aktuelle Apache Poi Bibliothek zum Einbinden in mein Programm Allgemeine Java-Themen 2
T log4j2 Wo liegt mein Logfile? Allgemeine Java-Themen 3
O Mein JButton Array funktioniert nicht Allgemeine Java-Themen 3
C Durch klicken von Button in GUI wird leeres Fenster geöffnet und nicht mein Spiel "Memory" Allgemeine Java-Themen 13
G Mein PDF Projekt mit iText Allgemeine Java-Themen 2
K Was ist mein Fehler? Allgemeine Java-Themen 2
itwestnet Mein Java-Programm läuft nicht in China Allgemeine Java-Themen 4
Thallius App-Sprache in der App ändern. Wo ist mein Denkfehler? Allgemeine Java-Themen 6
M Mein erstes TicTacToe :-) Allgemeine Java-Themen 3
A Applet Mein Applet verursacht Browserabsturz Allgemeine Java-Themen 8
Ollek MVC - Anwendung auf mein Projekt Allgemeine Java-Themen 18
K Wo ist mein Fehler? Allgemeine Java-Themen 21
J Mein eigener Messenger und dessen Probleme Allgemeine Java-Themen 48
C Hilfe! Mein Java mag nich mehr ganz... Allgemeine Java-Themen 11
F VideoIntro für mein Programm Allgemeine Java-Themen 2
A Wie lasse ich mein Programm als Daemon laufen? Allgemeine Java-Themen 4
A Wie liefere ich mein Java-Programm richtig aus? Allgemeine Java-Themen 10
G Entscheidungsproblem für mein Vorhaben, zwischen Java und C# Allgemeine Java-Themen 35
G Wie kann ich in mein Programm eine Updatefunktion einbauen Allgemeine Java-Themen 3
E Wie bekomme ich mein Image in das Fenster Allgemeine Java-Themen 2
V Beratung zum Bestimmen der "Mittel"(Java,Sql) mein Allgemeine Java-Themen 3
S mit welchem befehl kann ich mein programm autom. schließen Allgemeine Java-Themen 3
R Mein Applet läuft in der IDE aber nicht. Allgemeine Java-Themen 2
M Bitte Testen: Mein Multi-File Editor Allgemeine Java-Themen 30
B Fehler:Mein Applet kann nicht auf zwei txt-Dateien zugreifen Allgemeine Java-Themen 2
C Warum wartet mein thread nicht? Allgemeine Java-Themen 2
F Datei auslesen - wo ist mein Fehler? Allgemeine Java-Themen 9
T läuft mein Programm schon? - wie feststellen Allgemeine Java-Themen 6
T Warum mein such-tool schneller als Windows such-tool? Allgemeine Java-Themen 5
A Wie mach ich, das mein Button schneller reagiert. Allgemeine Java-Themen 13
A mein Frame wird nicht schnell genung aktualisiert Allgemeine Java-Themen 7
G JFrame nimmt mein Image nicht Allgemeine Java-Themen 2
D Mein Bäumchen Allgemeine Java-Themen 6
P String.replace() funktioniert nicht? Allgemeine Java-Themen 3
Xge Replace x Zeichen aus String Allgemeine Java-Themen 2
B Input/Output BufferedWriter/Reader replace line Allgemeine Java-Themen 6
KaffeeFan Methoden replace alle Buchstaben Allgemeine Java-Themen 3
K String.replace funktioniert nicht Allgemeine Java-Themen 3
nrg Find and replace Text docx Allgemeine Java-Themen 6
P ganze Zeilen in einem File mit .replace() ändern. Allgemeine Java-Themen 10
F Replace von Leerzeichen Allgemeine Java-Themen 8
M Replace Problem Allgemeine Java-Themen 10
L String Replace mit Regulärem Ausdruck Allgemeine Java-Themen 2
kodela replace und die Umlaute Allgemeine Java-Themen 10
E String replace java 1.4 Allgemeine Java-Themen 4
D Abstruse Probleme mit eigenem replace Algorithmus Allgemeine Java-Themen 11
G Mehrmals replace() auf langem String, zu speicherintensiv Allgemeine Java-Themen 10
E String.replace für (sehr) großen Text Allgemeine Java-Themen 9
S ￾ Zeichen umwandeln in ü per .replace(); Allgemeine Java-Themen 6
G spezielles replace Allgemeine Java-Themen 3
C Problem mit String.replace(CharSequence, CharSequence) Allgemeine Java-Themen 3
B Ersatz für "replace" Allgemeine Java-Themen 4
C String replace Allgemeine Java-Themen 8

Ähnliche Java Themen

Neue Themen


Oben