Erste Schritte Pattern.matcher,die Besonderheiten.

Dimax

Top Contributor
Hallo,
Leute brauche Erklärung:
Code->
Java:
final  String dataRegex="(?i)(^|;|\\%then|\\%else)\\s*DATA\\s+[^ =+].+?(?=\\s|;)";
final  String procRegex="(?i)(^|;|\\%then|\\%else)\\s*PROC\\s+[^ =+].+?(?=\\s|;)";
Pattern paternData=Pattern.compile(dataRegex);
Pattern paternProc=Pattern.compile(procRegex);
Matcher matchData=paternData.matcher(temp); 
Matcher matchProc=paternProc.matcher(temp);
if(!matchData.find()&&!matchProc.find()){
System.out.println("nichts gefunden");}else{
for(int i=0;i<temp.length();i++){
          
              matchData=paternData.matcher(temp.substring(i,temp.length())); 
              matchProc=paternProc.matcher(temp.substring(i,temp.length()));
    if(!matchData.find()&&!matchProc.find()) {
        break;
            }else {}
if(matchData.find() && !matchProc.find()){....usw
Warum geht das Program nicht in das erste if und uch nicht in das zweite?
 

LimDul

Top Contributor
weil beide find Methoden false lieferen, weil das Pattern nicht gefunden wird.

Wenn die Daten nicht dem Pattern entsprechen wird halt "nichts gefunden" ausgegeben.
 

LimDul

Top Contributor
Lesen bildet .. hab mich verlesen.

Der Code ist übrigens katastrophal eingerückt :)

Versuch den mal mit sauberer Einrückung zu posten, ich sehe gerade nicht wo welche öffende Klammer geschlossen wird. Du hast im else eine Schleife wo du matchData & matchProc übrigens änderst - das heißt, wenn das erste if nicht true ist, änderst du die Variablen und damit kann alles mögliche passieren.
 

Dimax

Top Contributor
Du hast im else eine Schleife wo du matchData & matchProc übrigens änderst
Genau dass ist mein Problem, ich muss in der 'Schleife Text analysieren ,und die Methode ist sehr lang, deswegen Poste ich nur den Anfang.
Die Regex sind geprüft und beide funktionieren.
Die Aufgabe ist :im Text nach bestimmten Sätzen zu suchen .Mit Regex finde ich aber den Anfang ,die Ende zu finden ist nicht so einfach ,weil ein Satz kann die Ende von dem ersten sein.Das ist ein volles if ->
Java:
if(matchData.find() && !matchProc.find()){
                    System.out.println(matchData.start()+i+"nur data");              
                              idxStepBegin=matchData.start()+i;
                              idxMatchEnd=matchData.end()+i;
                           
                         //Run Index 
                              matchRun=paternRun.matcher(temp.substring(idxMatchEnd,temp.length()));
                            if(matchRun.find()) {
                                //index of run +destination to index of ;
                                idxRun=matchRun.end()+idxMatchEnd;
                        
                            }else {
                            idxRun =-1; 
                       
                            }
                            //falls nach dem ersten Data folgt andere Data step
                            matchData=paternData.matcher(temp.substring(idxMatchEnd,temp.length()));
                    
                        //Data Index 
                        if(matchData.find()) { 
                         
                            idxData=temp.indexOf("DATA",matchData.start()+idxMatchEnd); 
                        
                         }else {idxData=-1; }
                        //wenn kein zweites data step folgt und run gibts
                        if(idxData==-1&&idxRun!=-1){
                            stepEnde= idxRun;
                            }else {}
                        //wenn kein zweites data step folgt und run gibts nicht
                        if(idxData==-1&&idxRun==-1) {
                            if(temp.lastIndexOf("%MEND")>0) {
                                stepEnde=temp.lastIndexOf("%MEND")+6;
                                System.out.println("Fehlende Step Ende,wurde MEND benutzt");
                                }else{    
                                    stepEnde=temp.lastIndexOf(";");
                                    System.out.println("Fehlende Step Ende,wurde last_index_of(;) benutzt");
                                }
                        }else {} 
                        //wenn zweites data folgt und run gibt es
                        if(idxData!=-1 && idxRun!=-1) {
                            stepEnde=Math.min(idxData,idxRun);
                            //System.out.println("Fehlende S"+temp.substring(stepEnde-5,stepEnde+5));
                        }
                        //wenn zweites data folgt und run gibt es nicht
                        else if(idxData!=-1 && idxRun==-1) {
                            stepEnde=idxData;
                            
                        }else {}
                        tempStep.append(temp.substring(idxStepBegin,stepEnde));
                        step.append(tempStep.substring(tempStep.indexOf("DATA"),tempStep.length()));
                        step_typ="DATA";
                        step_id=stepDatenRepo.maxId();
                        step_id++;
                        anzahl_semikolon=Analyse.Anzahl_Zeichen(step.toString(),";"); //ungetestet
                        anzahl_lines=Analyse.AnzahlZeilen(step.toString())+1; //mussen bearbeitet werden
                        anzahl_if_inData=Analyse.AnzahlIfInData(step.toString());
                        anzahl_select_inData=Analyse.AnzahlSelect(step.toString());
                        anzahl_select_inData=anzahl_select_inData+anzahl_if_inData;
                        anzahl_merge_inData=Analyse.AnzahlMerge(step.toString());
                        anzahl_where_inData=Analyse.AnzahlWhere(step.toString());
                        StepDatenPK stepDataPK = new StepDatenPK(projekt_id,programm_id,step_id);
                        StepDaten stepDaten=new StepDaten(stepDataPK,step_typ,anzahl_lines,step.toString(),
                                                            anzahl_select_inData,anzahl_merge_inData,
                                                            anzahl_where_inData,anzahl_semikolon);
                        stepDatenRepo.save(stepDaten);
                        step_typ=null; 
                        anzahl_lines=0; 
                        anzahl_if_inData=0; 
                        anzahl_select_inData=0;
                        anzahl_merge_inData=0; 
                        anzahl_where_inData=0; 
                        anzahl_semikolon=0; 
                        System.out.println(step);
                        tempStep.setLength(0);
                        step.setLength(0);
                        idxData=0; 
                        idxProc=0; 
                        idxRun=0; 
  
                        i=stepEnde;
                        idxMatchEnd=0;
                        idxStepBegin=0;
                        stepEnde=0;
                        continue;
}
Oder kann man irgendwie anders vorgehen?
 

mihe7

Top Contributor
Warum geht das Program nicht in das erste if und uch nicht in das zweite?
Wenn wir die beiden Statements
Java:
if ( !matchData.find() && !matchProc.find()) {}
if (  matchData.find() && !matchProc.find()) {}
ansehen, dann ist klar, dass die Bedingung im ersten if-Statement nicht erfüllt wird (und damit der then-Zweig nicht betreten wird), wenn matchData.find() == tue oder matchProc.find() == true gilt.

Wenn aber im zweiten if-Statement matchProc.find() == true gilt, dann ist die Bedingung auch nicht erfüllt.

Bevor man daraus Schlüsse zieht, kommt ein großes Aber. Die find-Methode ist nicht idempotent.

Es kann also durchaus sein, dass im ersten if-Statement matchData.find() == true und im zweiten matchData.find() == false gilt.

D. h. es gibt zwei Möglichkeiten:
  1. es gibt mind. zwei matchProc-Matches
  2. es gibt nur einen matchData-Match.
 

Dimax

Top Contributor
dass die Bedingung im ersten if-Statement nicht erfüllt wird (und damit der then-Zweig nicht betreten wird),
Ich habe es so gemacht damit das Programm nicht umsonst die Schleife ausführt ,.Wenn aber die Schleife ausgeführt wird, kann das Programm den Text fürs Pattern reduzieren und es kann wieder beide matcher ==false sein. Zwei fragen: 1.kan man in der Schleife überhaupt so matchen? 2.welche Alternativen gibt es diesem Verfahren?
 

Dimax

Top Contributor
Kann mir jemand erklären warum bei so einem code ->
Java:
for(int i=0;i<temp.length();i++){
         
              matchData=paternData.matcher(temp.substring(i,temp.length()));
              matchProc=paternProc.matcher(temp.substring(i,temp.length()));
    if(!matchData.find()&&!matchProc.find()) {
        break;
            }else {}
if(matchData.find() && !matchProc.find()){.usw..
geht das Programm hier nicht rein(wird beides übersprungen)->if(matchData.find() && !matchProc.find())
wenn ich aber dass hier lösche -> if(!matchData.find()&&!matchProc.find()) { break; }else {} dann geht.
 

mihe7

Top Contributor
Das hatte ich doch oben erklärt.

Hintergrund ist die find-Methode, in deren Doku sich finden lässt: "This method starts at the beginning of this matcher's region, or, if a previous invocation of the method was successful and the matcher has not since been reset, at the first character not matched by the previous match."

Wenn Du das Ergebnis eines find-Aufrufs mehrfach auswerten willst, einfach in eine Variable speichern und diese für die Auswertung mehrfach verwenden.
 

Dimax

Top Contributor

mihe7

was kann man machen wenn ich folgende Prüfung beliebig oft machen muss?​

matchData=paternData.matcher(temp.substring(idxMatchEnd,temp.length())); //Data Index if(matchData.find()) { idxData=temp.indexOf("DATA",matchData.start()+idxMatchEnd); }else {idxData=-1; }
Steht in der zweiten Code von mir.Sorry fürs Fettschreiben ,habe andere Problemme.
 

mihe7

Top Contributor
Wir schreiben aneinander vorbei. Wenn Du
Java:
boolean dataFound = matchData.find();
schreibst, kannst Du 5 Mio. Mal auf dataFound zugreifen und wirst immer das gleiche Ergebnis erhalten. Wenn Du dagegen (analog zu Deinen if-Abfragen innerhalb der Schleife) 5 Mio. Mal matchData.find() aufrufst, kann es sein, dass Du 4 Mio. Mal true erhältst und ab dann nur noch false, weil find eben "weitersucht".
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
W RegEx Matcher + Pattern und Emails Java Basics - Anfänger-Themen 8
Bregedur Methoden Matcher und Pattern bei sich wiederholenden Werten Java Basics - Anfänger-Themen 1
Z Pattern und Matcher substring zu String möglich? Java Basics - Anfänger-Themen 4
M RegEx Pattern Matcher Java Basics - Anfänger-Themen 16
N Regexp Pattern & Matcher Problem Java Basics - Anfänger-Themen 4
A Pattern und Matcher Java Basics - Anfänger-Themen 9
T Frage zu Pattern/Matcher Java Basics - Anfänger-Themen 6
megachucky regex-Problem ( mit den Klassen Matcher / Pattern) --> XML prüfen Java Basics - Anfänger-Themen 11
0 Probleme mit Pattern und Matcher Java Basics - Anfänger-Themen 5
K Probleme mit RegEx (Pattern und Matcher) Java Basics - Anfänger-Themen 2
F Pattern und Matcher Java Basics - Anfänger-Themen 4
D was ist der vorteil vom Builder-design pattern? Java Basics - Anfänger-Themen 11
W GoF-Pattern im Programmierer-Alltag Java Basics - Anfänger-Themen 113
D Java Pattern mit X Ausgabe Stern Java Basics - Anfänger-Themen 4
J Methoden Observer-Pattern mit Consumer und accept( ) Java Basics - Anfänger-Themen 6
N Best Practice Frage zum MVC-Pattern Java Basics - Anfänger-Themen 2
J Implementierung von Observer und Singleton-Pattern Java Basics - Anfänger-Themen 9
F Design pattern Java Basics - Anfänger-Themen 29
M Schlüsselworte Unterschied: String.matches und Pattern.compile Java Basics - Anfänger-Themen 2
C Best Practice JTable in MVC Pattern Java Basics - Anfänger-Themen 7
D Design Pattern Command Java Basics - Anfänger-Themen 3
fLooojava MVC Pattern und Observer Pattern Java Basics - Anfänger-Themen 6
S Regex Pattern Java Basics - Anfänger-Themen 3
B Pattern für Email Liste Java Basics - Anfänger-Themen 3
J Builder Pattern implementieren Java Basics - Anfänger-Themen 3
Tarrew Proxy Design-Pattern Java Basics - Anfänger-Themen 1
M Methoden Pattern Matching Vokal Java Basics - Anfänger-Themen 2
agent47 Pattern split Java Basics - Anfänger-Themen 2
J MVC Pattern, mehrere Controller/Views/Models Java Basics - Anfänger-Themen 0
B Strategy Pattern - Rechner Java Basics - Anfänger-Themen 6
I Vertändnisfrage zu Prototype Pattern Java Basics - Anfänger-Themen 0
L Kompositum-Pattern Hilfe :O Java Basics - Anfänger-Themen 4
F eigenes Listener Pattern mit Interface Java Basics - Anfänger-Themen 1
S Je nach erhaltene Daten unterschiedlich reagieren (Design Pattern?) Java Basics - Anfänger-Themen 3
B Pattern Matching ohne Match-Methoden Java Basics - Anfänger-Themen 11
Furtano OOP Memento Pattern | übergabe einer Kopie des Arrays Java Basics - Anfänger-Themen 0
F Erste Schritte Pattern zum Zerlegen von selbstdefinierten Dateinamen Java Basics - Anfänger-Themen 7
M MVC + Strategy Pattern Ansatz (mit Code) Java Basics - Anfänger-Themen 5
A Design Pattern - Welche? Java Basics - Anfänger-Themen 33
Rudolf OOP Übungen zu Design Pattern in Java Java Basics - Anfänger-Themen 6
A Observer Pattern Problem Java Basics - Anfänger-Themen 15
J Interface Frage zu Interfces am Beispiel Observer Pattern Java Basics - Anfänger-Themen 8
S OOP Regex Pattern Java Basics - Anfänger-Themen 2
P Grundsatzfrage zu Decorator-Pattern Java Basics - Anfänger-Themen 6
L Pattern Matching Java Basics - Anfänger-Themen 3
L RegExp bzw Pattern in Java Java Basics - Anfänger-Themen 6
Helgon Observer Pattern - hasChanged() immer false Java Basics - Anfänger-Themen 10
R aktualisierung des View im MVC-Pattern Java Basics - Anfänger-Themen 5
R Pattern bzw. Regex HTML-Code Java Basics - Anfänger-Themen 10
I OOP Verständnisfrage zu Singelton Pattern Java Basics - Anfänger-Themen 21
R Welches Design pattern Java Basics - Anfänger-Themen 10
B static und Pattern matching Java Basics - Anfänger-Themen 22
T pattern klappt nicht so Java Basics - Anfänger-Themen 6
T Decorator Pattern Java Basics - Anfänger-Themen 7
D Pattern in Midi-Sequencer Java Basics - Anfänger-Themen 2
V Frage zu Decorator-Pattern Java Basics - Anfänger-Themen 4
S OOP Factory Pattern Java Basics - Anfänger-Themen 2
C OOP Observer Pattern Java Basics - Anfänger-Themen 2
M Regex-Pattern Java Basics - Anfänger-Themen 2
Haubitze_Broese Pattern für Links in RSS-Reader Java Basics - Anfänger-Themen 6
Raidri Pattern liefert false Java Basics - Anfänger-Themen 9
O useDelimiter / Muster im Parameter (Pattern) Java Basics - Anfänger-Themen 6
S Problem mit Pattern Java Basics - Anfänger-Themen 2
S Pattern.matches mit Ignore Case Java Basics - Anfänger-Themen 2
N in int array einen pattern(eine zahl) finden Java Basics - Anfänger-Themen 21
A Hilfe zu Pattern Java Basics - Anfänger-Themen 2
Y Pattern Java Basics - Anfänger-Themen 2
A Proxy Pattern implementieren Java Basics - Anfänger-Themen 2
N OOP MVC Pattern Java Basics - Anfänger-Themen 3
G Probleme mit Pattern und Aussagenlogik Java Basics - Anfänger-Themen 6
H Verständnis Strategy Pattern Java Basics - Anfänger-Themen 4
D regexp-pattern .. letzter schliff Java Basics - Anfänger-Themen 6
A ist das ein Singleton-Pattern? Java Basics - Anfänger-Themen 6
Z regexp/pattern für dateipfad Java Basics - Anfänger-Themen 5
A Factory Pattern Java Basics - Anfänger-Themen 2
D Objekte anlegen und Singleton Pattern Java Basics - Anfänger-Themen 21
O Erklärung für Pattern Java Basics - Anfänger-Themen 5
U Java Pattern Regex Java Basics - Anfänger-Themen 9
K Observer Pattern notifyObservers Java Basics - Anfänger-Themen 9
S geeignetes Such Pattern Java Basics - Anfänger-Themen 6
J Zugriff mit Visitor Pattern auf eigen erstellte verk. Liste Java Basics - Anfänger-Themen 3
J Visitor Pattern Java Basics - Anfänger-Themen 4
W Observer-Pattern Java Basics - Anfänger-Themen 3
M Singleton Pattern Java Basics - Anfänger-Themen 35
J Singleton Pattern Java Basics - Anfänger-Themen 5
J Ant pattern Erklaerung Java Basics - Anfänger-Themen 4
G Aufbau MVC-Pattern Java Basics - Anfänger-Themen 6
M Pattern Matching Java Basics - Anfänger-Themen 2
S Singleton Pattern passend hierfür? Java Basics - Anfänger-Themen 60
M Factory Pattern Ansatz falsch? Java Basics - Anfänger-Themen 6
Y Hilfe bei Pattern-Regexp Java Basics - Anfänger-Themen 5
U pattern Java Basics - Anfänger-Themen 2
A Pattern.matches(); Java Basics - Anfänger-Themen 14
A Problem mit Obser-Pattern Java Basics - Anfänger-Themen 2
P pattern/match Java Basics - Anfänger-Themen 2
K Regex Pattern Java Basics - Anfänger-Themen 4
G Vorteile Reflection bezüglich MVC-Pattern Java Basics - Anfänger-Themen 9
F regex pattern problem Java Basics - Anfänger-Themen 4
S Regex Pattern Problem Java Basics - Anfänger-Themen 2
G Singleton Pattern Java Basics - Anfänger-Themen 7

Ähnliche Java Themen

Neue Themen


Oben