Hallo,
gibt es eine brauchbare Methode, die mir die Anzahl von
„and“-s und „or“-s innerhalb einer Datei ermitteln kann?
Wie kann ich das Problem am elegantesten lösen?
Gruß,
Fabian
Hi Fabian,
da stellt sich erstmal die Frage, was du mit den „and“-s und „or“-s genau meinst?!
Meinst du a) && und ||
oder b) „and“ und „or“ als Phrase
Bei a) ist die Sache etwas einfacher, denn sollte es eine Quelltext-Datei sein, dann kannst du davon ausgehen, dass (außer in Kommentaren) alle Vorkommen gezählt werden können.
Bei b) ist das dann etwas kniffliger, denn „and“ kommt z.B. als Substring in dem String „rand“ vor.
In beiden Fällen würde ich jedoch die Verwendung von regulären Ausdrücken empfehlen (siehe ein paar Postings weiter unten) und die Datei Zeilenweise parsen.
Ciao, Bill
Matcher-Obj einen Stream übergeben!?
Hi Bill,
eigentliche will ich die Anzahl von bestimmten Tags innerhalb einer XML-Datei bestimmen. Habe auch bereits Deinen Vorschlag aufgegriefen und ich versuche es mit der regexp Bibliothek zu lösen.
Klappt auch so weit ganz gut. Ich weiß aber nicht, wie ich dem Matcher-Object den Inhalt einer Datei (also einen Stream) übergeben kann.
Der nimmt anscheinend nur Strings an?!
Gruß,
Fabian
eigentliche will ich die Anzahl von bestimmten Tags innerhalb
einer XML-Datei bestimmen. Habe auch bereits Deinen Vorschlag
Dann koenntest du doch einfach den SAX Parser verwenden.
http://java.sun.com/webservices/docs/1.0/tutorial/do…
http://java.sun.com/xml/jaxp/dist/1.1/docs/api/overv…
http://xml.apache.org/#xerces
Da gibt es dann eine Methode startElement(…String qName…)
in der du dann nach dem „qualified name“ (qName) abfragen kannst,
z.B. if (qName.equals(„bla“)) counter++; oder so.
Gruss
Patrick
aufgegriefen und ich versuche es mit der regexp Bibliothek zu
lösen.
Klappt auch so weit ganz gut. Ich weiß aber nicht, wie ich dem
Matcher-Object den Inhalt einer Datei (also einen Stream)
übergeben kann.
Der nimmt anscheinend nur Strings an?!
Hi.
Klappt auch so weit ganz gut. Ich weiß aber nicht, wie ich dem
Matcher-Object den Inhalt einer Datei (also einen Stream)
übergeben kann.
Der nimmt anscheinend nur Strings an?!
Die Grundlegende Frage bei Mustererkennung (Regular Expressions) ist ja, womit du das definierte Muster vergleichen möchtest. Ein Stream liefert das Ganze aber Stück für Stück (oder Zeichen für Zeichen). Damit kannst du auch nur immer das aktuelle Zeichen mit etwas vergleichen. Um effektiv mit RE über die ganze HTML-Datei arbeiten zu können, müßtest du den Stream in einen String schreiben (StringWriter) und dann die Regular Expression über den ganzen String vergleichen lassen.
Wenn du nach bestimmten Tags suchst, könntest du auch wegen Performance-Gründen den Stream zwischenpuffern. Dh. Jedes Zeichen abpassen, falls ein vorliegt pufferung abschließen, die RE auf den Puffer anwenden und dann weitermachen. Das funktioniert aber nur für die Erkennung einzelner Start- bzw. Endtags.
Für Einfache Parsing-Aufgaben sind xml-parser wie dom4j und Konsorten IMHO etwas zu Aufwendig.
mfG,
J.P.Jarolim
Andrerseits… wozu das Rad neu erfinden?
Mit dom4j und XPath kannst du ganz leicht die Menge von Knoten selektieren, die du suchst und dann die Anzahl der gefunden Knoten auslesen.
Dürfte dann die einfachste Lösung sein. Eine nette URL zu XPath könnte ich dir auch aus der Firma posten, wenn du möchtest.
mfG,
J.P.Jarolim