pattern dynamisch vorkompilieren

Tandibur

Mitglied
Hi,

ich habe eine xml-Datei, in der verschiedene Muster und die dazugehörigen Merkmale gespeichert sind.
Diese lese ich mit jdom aus.
Nun will ich eine große Anzahl an Stringobjekten auf diese Muster überprüfen lassen und dementsprechend in den Attributen die Werte eintragen. Z.B: "1122334455" passt auf Muster "11..3.....", setze die unter dem Muster gespeicherten Attribute im Stringobjekt.
In der JavaInsel steht:
Hinweis Bei mehrmaliger Anwendung des gleichen Patterns sollte es compiliert gecacht werden, denn das immer wieder nötige Übersetzen über die Objektfunktion String#matches() bzw. die statische Funktion Pattern.matches() kostet Speicher und Laufzeit.
Dazu müsste ich doch für jedes Muster eine statische pattern-Variable anlegen. Das würde ich gern umgehen, da ich sonst bei Hinzukommen neuer Muster an den Quelltext ran müsste. Muss doch irgendwie auch so gehen, dass keine Daten in der Programmlogik enthalten sind.

Ich glaube, ich brauche eine Konstruktion, die mir erlaubt, entsprechend der aus dem xml ausgelesenen Muster die benötigte Anzahl an pattern vorzukompilieren.

Tandibur
 
S

SlaterB

Gast
irgendwo musst du ja die Pattern herbekommen, ganz ohne gibt es kein Programm,
wenn die Pattern-Strings nicht statisch vorgegeben sind, sondern z.B. aus dem XML ausgelesen werden,
kannst du eine Map anlegen,
zu jedem String schaust du erst in der Map nach, ob schon ein Pattern vorhanden ist, sonst neu erzeugen und dort ablegen
 

Tandibur

Mitglied
Hi,

die xml ist eine Art Konfigurationsdatei, in der die möglichen Muster definiert sind. Nun können diese aber auch erweitert werden. Deshalb möchte ich es dynamisch halten.
Wenn ich die Muster in eine Map lege (wahrscheinlich ja dann mit dem Muster als id), findet das Programm dann auch alle passenden Muster? Manche Muster überschreiben ein anderes, weil sie speziellere Angaben enthalten.
Ein Beispiel: Muster "11..3....." steht für "Fahrzeug", Muster "11..33...." steht für "PKW". Nun sucht das Programm für das Objekt "1185335974" nach einem passenden Muster und findet "11..3.....". Sucht es weiter nach "11..33....", oder bricht es dann ab? In den Mustern stehen Ränge, so dass ein Muster mit mehr passenden Stellen ein niederrangiges überschreibt, in dem Beispiel sollte die Klassifizierung also "PKW" und nicht nur "Fahrzeug" sein.
Lege ich die pattern in eine Liste, kann ich diese durchwandern und nach dem passenden Muster mit dem höchsten Rang suchen. (Die Idee mit der Liste kam mir erst jetzt) Geht das irgendwie auch mit maps?
(Es geht natürlich nicht um Autos, aber das ist ein leicht verständliches Beispiel)

Tandibur
 
S

SlaterB

Gast
ich habe herzlich wenig Ahnung was in deinem Programm vor sich geht, wer wann warum wo nach welchem was auch immer sucht ;)

ich sprach jedenfalls von einem simplen Cache-Arbeitsschritt, beliebig an einer Code-Stelle einbaubar, um erneutes Erzeugen von Pattern zu vermeiden
Java:
public class Test {
    public static void main(String args[]) {
        String[][] x =  { {"xxy", "x*"},
                          {"xxy2", "x*y"},
                          {"xxy", "x*y"}};
        Map<String, Pattern> map = new HashMap<String, Pattern>();
        for (String[] st : x)
        {
            String txt = st[0];
            String pat = st[1];
            Pattern p = map.get(pat);
            System.out.println("teste " + txt + " mit Pattern " + pat + ", schon vorhanden? " + (p != null));
            if (p == null)
            {
                System.out.println("erstelle Pattern neu");
                p = Pattern.compile(pat);
                map.put(pat, p);
            }
            System.out.println("match: " + p.matcher(txt).matches());
        }
    }
}
->
Code:
teste xxy mit Pattern x*, schon vorhanden? false
erstelle Pattern neu
match: false
teste xxy2 mit Pattern x*y, schon vorhanden? false
erstelle Pattern neu
match: false
teste xxy mit Pattern x*y, schon vorhanden? true  [<-- hier wird einmal Pattern-Erzeugung eingespart]
match: true
 

Tandibur

Mitglied
Hi,

dein Quellcode legt ja eigentlich nur pattern mit zugehörigem Beispiel an und legt sie in der Map ab.
Ich möchte jedoch eher eine "pattern-Bibliothek". Ich nehme dann ein zu klassifizierendes Objekt und sage dem Programm: schau mal in der Bibliothek nach, was das ist.
Eine (eher blöde) Methode wäre nun pattern-Objekte fest anzulegen und mit if(stimmt mit pattern a überein) else if(stimmt mit pattern b überein) ... oder gar catch(objekt) case pattern a; case pattern b ...

In einer Datenbank hätte ich 2 Tabellen, eine mit den Objekten und eine mit Klassifizierungen auf die ich per Fremdschlüssel verweise. Da ich meine Objekte aber mit den Attributen(die mir die Muster erst liefern) in eine Textdatei schreiben will und es sich um viele Objekte handelt, sind derart viele Datenbankabfragen zu langsam. Deshalb speichere ich die Muster in xml und lese sie in den Speicher, um schnell darauf zugreifen zu können.

Ich probiere jetzt mal mit Liste, wenn es so läuft, wie es soll, sage ich Bescheid und setze "erledigt".

Tandibur

P.S: schreibe ich eigentlich zuviel? ^^
 
S

SlaterB

Gast
für mich klingt dein Problem nicht anders als am Anfang und wie im meinem Programm beschrieben,
zu einem zu prüfenden String hast du ein (oder mehrere) mögliche Pattern als String,
das funktioniert alles nur werden zu oft neue Pattern-Objekte zu immer gleichen (wenn auch im Quellcode unbekannten) Pattern-Strings erzeugt,

genau da hilt die Map, um sparsam zu einem Pattern-String (nicht den zu testenden String) ein evtl. schon vorhandenes Pattern-Objekt zu finden,
nicht mehr und nicht nicht weniger
 

Tandibur

Mitglied
Hi

Bin dabei, die Liste reinzuprogrammieren und hab dabei ein kleines Problem mit dem Sortieren:

Ich erweitere meine Objektklasse Muster1:
Java:
public class Muster1 implements Comparable{
Dann klicke ich auf das von NetBeans angebotene "implement all abstract methods".
Java:
public int compareTo(Object arg0) {
        throw new UnsupportedOperationException("Not supported yet.");
    }
Diese Methode passe ich an:
Java:
public int compareTo(Muster1 musterb){        
        if(this.getRang()==musterb.getRang())return 0;
        else if (this.getRang()<musterb.getRang())return -1;
        else return 1;
    }

Und nun bekomme ich den Fehler an der Klassendefinition:
Muster1 is not abstract and does not override abstract method compareTo(java.lang.Object) in java.lang.Comparable

Ich bekomme den Fehler weg, indem ich wieder die abstrakte Methode implementiere, aber dann hab ich ja 2 gleiche Methooden, oder?

Tandibur
 
S

SlaterB

Gast
tja, nur weil du irgendwelche nicht-relevanten Methoden definierst bleibt dir nicht die Arbeit der korrekten Interface-Implementierung erspart,
und sicher hast du dann zwei Methoden, wenn du noch 5 weitere beliebige Methoden implementierst sind es gar 7, aber das ist ja kein Argument ;)

gleicher Name bei anderen Parametern oder 'das soll doch so und so sein' sind für den Compiler auch nicht entscheidend

das Interface Comparable verlangt nach compareTo(Object arg0), alles andere geht nicht,
mit Generics ab Java 1.5 könntest du aber
> implements Comparable<Muster1>{
schreiben, dann wäre deine Methode genau die gesuchte
 
Zuletzt bearbeitet von einem Moderator:

Tandibur

Mitglied
Hi,

hab es hinbekommen.

Ich erstelle anhand der xml-Datei zu jedem "Muster"-Element eine Instanz der Klasse Muster und schreibe deren Attribute entsprechend des Elementinhaltes. Diese Objekte lege ich in eine Liste und sortiere sie nach ihrem Merkmal "Rang".
In der Routine gehe ich dann diese Liste umgekehrt durch (absteigend sortieren habe ich nicht hinbekommen ???:L) und suche nach dem ersten passenden Muster. Sobald eines passt, bricht die Schleife ab und ich hab in meinen Materialobjekten die Eigenschaften des passenden Musters übernommen.

Klappt also alles genauso wie es soll. Danke für die Hilfen :toll:

Tandibur
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
mihe7 equals und instanceOf pattern matching Allgemeine Java-Themen 9
L Pattern Eventhandler Allgemeine Java-Themen 5
EinNickname9 Best Practice Singleton und Singleton mit Instanz zu anderer Klasse -Pattern Allgemeine Java-Themen 30
Z MVC Pattern - sinnvolle Integration Allgemeine Java-Themen 6
J Meinung zum verwendeten Design Pattern Allgemeine Java-Themen 4
Kirby.exe Filename nach bestimmtem Pattern durchsuchen Allgemeine Java-Themen 5
Meeresgott Best Practice "Spezifisches" Factory Pattern ? Allgemeine Java-Themen 1
H Strategy Pattern - changeColor() Methode - input rgd oder hex einlesen Allgemeine Java-Themen 1
M Vaadin MVP Pattern Allgemeine Java-Themen 1
N Java MVC Pattern richtig anwenden Allgemeine Java-Themen 24
M OOP Design Pattern - "extends Observable implements Observer" Allgemeine Java-Themen 0
K Factory Pattern: Mit Generics umgehen Allgemeine Java-Themen 6
perlenfischer1984 Welches Design Pattern ist geegneit. Allgemeine Java-Themen 7
perlenfischer1984 Hilfe bei Design (Pattern) Allgemeine Java-Themen 5
J Compilerfehler bis in java.util.regex.Pattern... Allgemeine Java-Themen 2
B MVC-Pattern größeres Beispiel Allgemeine Java-Themen 16
GreenTeaYT Verstehe nicht ganz das Observer Pattern in einer Arrayliste? Allgemeine Java-Themen 3
L Erste Schritte Java Date Format Pattern bestimmten Allgemeine Java-Themen 2
D Pattern mit Pattern vergleichen Allgemeine Java-Themen 3
D OOP Design Pattern für GUI - Datenbank Anwendung Allgemeine Java-Themen 1
S Hilfe bei geeignetem Pattern (Decorierer) Allgemeine Java-Themen 2
F Welches Design Pattern? Allgemeine Java-Themen 3
J Pattern aus String entfernen Allgemeine Java-Themen 2
S Pattern.Match Suche: For Schleife einbinden und in Liste schreiben Allgemeine Java-Themen 3
D Variablen zur Laufzeit global speichern (Registry Pattern?) Allgemeine Java-Themen 6
Rudolf State Pattern als Enum? Allgemeine Java-Themen 10
M massenhaft verschiedene Date-Pattern Allgemeine Java-Themen 3
Guybrush Threepwood Pattern gesucht: Punkt ohne Leerzeichen dahinter Allgemeine Java-Themen 3
turmaline OOP Decorater Pattern für Varifikationsverhalten Allgemeine Java-Themen 13
T HTML Tag Position mittels Pattern ermitteln Allgemeine Java-Themen 7
X Datentypen Prozentualer Abgleich zwischen 2 Strings (Pattern?) Allgemeine Java-Themen 3
H Pattern.compile Syntax Allgemeine Java-Themen 15
B RegEx: (Um-)formulieren eines Pattern zur Identifizierung komplexer URLs Allgemeine Java-Themen 7
D [Drag&Drop] Design-Pattern-Frage Allgemeine Java-Themen 4
T Pattern für Benutzer-Gruppen, RMI Allgemeine Java-Themen 5
E Super erzwingen, konzept/pattern gesucht. Allgemeine Java-Themen 8
H Problem mit der Klasse Pattern - Regulärer Ausdruck Allgemeine Java-Themen 2
Eldorado Meinung zu einem abgewandelten MVC-Pattern Allgemeine Java-Themen 2
R Matcher - Pattern mit belibigem Anfang Allgemeine Java-Themen 2
H Bestimmten String mit Pattern und Matcher herauslesen => kein erfolg Allgemeine Java-Themen 9
I Pattern zum Erweitern existierender Objekte Allgemeine Java-Themen 4
I Template Method pattern mit "geschützten Methoden" Allgemeine Java-Themen 5
T Pattern: Passive View Allgemeine Java-Themen 2
K Verständnisprobleme bei Observer-Pattern mit größerem Datenmodell Allgemeine Java-Themen 32
T Pattern: Greedy, Reluctant, Possessive Allgemeine Java-Themen 4
S Hilfe bei Pattern Allgemeine Java-Themen 5
N Registry Pattern Allgemeine Java-Themen 7
Tandibur Denkfehler bei Pattern.matches? Allgemeine Java-Themen 3
A Observer Pattern: feuern bei neuer Referenz-Zuweisung? Allgemeine Java-Themen 8
N Pattern Allgemeine Java-Themen 11
Iron Monkey Pattern - Matcher - Problem Allgemeine Java-Themen 3
ruutaiokwu welches design pattern? frage an die oo-experten unter euch... Allgemeine Java-Themen 3
G Accordion Design Pattern Frage Allgemeine Java-Themen 2
hdi Hilfe beim Design (Stichwort OO, Pattern, ...) Allgemeine Java-Themen 11
U Verständnisschwierigkeiten Observer Pattern Allgemeine Java-Themen 18
H2SO3- String(pattern) von SimpleDateFormat auslesen Allgemeine Java-Themen 7
M Problem mit Pattern Allgemeine Java-Themen 3
N Welches design pattern? Allgemeine Java-Themen 8
B Pattern gesucht, Programm Optionen, Casten vermeiden Allgemeine Java-Themen 3
D Welches Pattern kann ich nutzen? Allgemeine Java-Themen 9
J Suche regex-Pattern fuer Liste von Zahlen zwischen 0-100 Allgemeine Java-Themen 6
G Sequenzdiagramm Dao Pattern Allgemeine Java-Themen 3
D Observer/Observable Pattern vs. Listener-Konzept Allgemeine Java-Themen 4
S regex-Pattern Ausdruck negieren Allgemeine Java-Themen 2
J Pattern eines Textes Allgemeine Java-Themen 4
M Java Garbage Collector Frage (Singleton Pattern) Allgemeine Java-Themen 13
Y Pattern Problem Allgemeine Java-Themen 2
G UML-Diagramme mit DAO Pattern Allgemeine Java-Themen 7
S Pattern regex Allgemeine Java-Themen 2
G Composite, Design Pattern, printTree Allgemeine Java-Themen 42
J Regex Pattern Problem Allgemeine Java-Themen 12
P MVC Pattern Allgemeine Java-Themen 31
C Pattern für Kommunikation gesucht Allgemeine Java-Themen 3
G Frage zu MVC Pattern Allgemeine Java-Themen 6
J Pattern und Regex Allgemeine Java-Themen 2
L Wie Pattern anwenden um Cipher zu nutzen Allgemeine Java-Themen 2
S Singleton Pattern mit Generics Allgemeine Java-Themen 4
M MVC Design Pattern - Verständniss Fragen Allgemeine Java-Themen 3
F Typüberprüfung in Superklasse - geeignetes Pattern? Allgemeine Java-Themen 11
M Java Pattern hilfe Allgemeine Java-Themen 6
N Observer Pattern Allgemeine Java-Themen 2
G Problem mit MVC-Pattern (Controller als anonyme Unterklasse) Allgemeine Java-Themen 2
F Design Pattern zur Realisierung von Mehrfachvererbung? Allgemeine Java-Themen 8
M Pattern aus Properties Allgemeine Java-Themen 3
I Composite Pattern für Ausgabe von Ausdruck Allgemeine Java-Themen 3
G mit Pattern strings filtern ein kleines problemchen ;) Allgemeine Java-Themen 2
M nach einem Pattern splitten Allgemeine Java-Themen 2
F Composite Pattern in Java? Allgemeine Java-Themen 1
G problem mit dem observer pattern Allgemeine Java-Themen 3
C Matcher/Pattern ersetzten für JDK 1.3 Allgemeine Java-Themen 2
M Pattern: Summary of regex constructs: Backslash Allgemeine Java-Themen 2
G Scanner und Abbruchbedingung/Pattern Allgemeine Java-Themen 2
F suche im Classpath mit Pattern *.gif Allgemeine Java-Themen 16
G Frage zum Observer Pattern Allgemeine Java-Themen 4
D Design Pattern: Singleton Allgemeine Java-Themen 4
M Pattern, Matcher, Split Allgemeine Java-Themen 2
berserkerdq2 Jemand einen Tipp wie man ein Javafx-Hintergrund "dynamisch" macht Allgemeine Java-Themen 3
E RMI FWH: RMI- Wie erstelle ich stubs dynamisch, bzw. unterdrücke eine Statisch-Warnung? Allgemeine Java-Themen 0
S Maven Jars dynamisch laden / Plugin-Struktur erstellen Allgemeine Java-Themen 14
T Statisch und dynamisch Allgemeine Java-Themen 1

Ähnliche Java Themen

Neue Themen


Oben