Matcher.find() findet 1. Treffer immer doppelt?
*Markus
- java
Hi,
ich durchsuche folgenden Text:
<div class="vsThumbs">
<div id="setThumbs">
<a href="/photos/14341958@N03/1478405712/in/set-72157602245820202/" title="screenshotDavor" class="image_link" id="set_thumb_link_1478405712"><img src="http://farm2.static.flickr.com/1219/1478405712_d1301e1122_s.jpg" alt="screenshotDavor" width="75" height="75" /></a><a href="/photos/14341958@N03/1499332140/in/set-72157602245820202/" title="HPIM0233" class="image_link" id="set_thumb_link_1499332140"><img src="http://farm3.static.flickr.com/2077/1499332140_e67e8ec92a_s.jpg" alt="HPIM0233" width="75" height="75" /></a><a href="/photos/14341958@N03/1498488199/in/set-72157602245820202/" title="HPIM0251" class="image_link" id="set_thumb_link_1498488199"><img src="http://farm3.static.flickr.com/2059/1498488199_e7ca85916e_s.jpg" alt="HPIM0251" width="75" height="75" /></a> </div>
Ich extrahiere hier alle Link mit der Endung .jpg:
Matcher matcher = Pattern.compile("<img src=\"(http://[/\\.\\w\\d]+)_\\w*\\.jpg\" alt=\"").matcher(htmlFile);
int i = 0;
while (matcher.find()) {
if (!graphicURLs.contains(matcher.group(1)+".jpg?v=0")) {
graphicURLs.add(matcher.group(1)+".jpg?v=0");
System.out.println("Found: " + matcher.group(1) + ".jpg?v=0");
i++;
}
}
System.out.println(i + " Graphics found!");
return graphicURLs;
Aber dummerweise musste ich diese IF-Verzweigung einbauen, da der erste Treffer (und nur der erste) immer doppelt in die ArrayList geschrieben wird und ich verstehe nicht wieso. Das würde dann so aussehen:
http://farm2.static.flickr.com/1219/1478405712_d1301e1122.jpg?v=0
http://farm2.static.flickr.com/1219/1478405712_d1301e1122.jpg?v=0
http://farm3.static.flickr.com/2077/1499332140_e67e8ec92a.jpg?v=0
http://farm3.static.flickr.com/2059/1498488199_e7ca85916e.jpg?v=0
Wieso passiert das, würde ich die If-Verzweigung nicht verwenden?
Markus
Hallo *Markus,
Wieso passiert das, würde ich die If-Verzweigung nicht verwenden?
Das passiert nicht. Zumindest nicht, wenn man Deinen Code, den Du gezeigt hast, nutzt.
/**
*
* Beschreibung
*
* @version 1.0 vom 08.10.2007
* @author Michael Loesler
*/
import java.util.ArrayList;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class RegExpTest {
public static ArrayList<String> getGraphicURLs(String htmlFile){
ArrayList<String> graphicURLs = new ArrayList<String>();
Matcher matcher = Pattern.compile("<img src=\"(http://[/\\.\\w\\d]+)_\\w*\\.jpg\" alt=\"").matcher(htmlFile);
while (matcher.find()) {
graphicURLs.add(matcher.group(1)+".jpg?v=0");
}
return graphicURLs;
}
public static void main(String[] args) {
String htmlFile = "<div class=\"vsThumbs\"><div id=\"setThumbs\"><a href=\"/photos/14341958@N03/1478405712/in/set-72157602245820202/\" title=\"screenshotDavor\" class=\"image_link\" id=\"set_thumb_link_1478405712\"><img src=\"http://farm2.static.flickr.com/1219/1478405712_d1301e1122_s.jpg\" alt=\"screenshotDavor\" width=\"75\" height=\"75\" /></a><a href=\"/photos/14341958@N03/1499332140/in/set-72157602245820202/\" title=\"HPIM0233\" class=\"image_link\" id=\"set_thumb_link_1499332140\"><img src=\"http://farm3.static.flickr.com/2077/1499332140_e67e8ec92a_s.jpg\" alt=\"HPIM0233\" width=\"75\" height=\"75\" /></a><a href=\"/photos/14341958@N03/1498488199/in/set-72157602245820202/\" title=\"HPIM0251\" class=\"image_link\" id=\"set_thumb_link_1498488199\"><img src=\"http://farm3.static.flickr.com/2059/1498488199_e7ca85916e_s.jpg\" alt=\"HPIM0251\" width=\"75\" height=\"75\" /></a></div>";
ArrayList<String> graphicURLs = getGraphicURLs(htmlFile);
System.out.println("Found " + graphicURLs.size() );
for (int i=0; i<graphicURLs.size(); i++)
System.out.println( graphicURLs.get(i) );
}
}
liefert mir als Ergebnis:
Found 3
http://farm2.static.flickr.com/1219/1478405712_d1301e1122.jpg?v=0
http://farm3.static.flickr.com/2077/1499332140_e67e8ec92a.jpg?v=0
http://farm3.static.flickr.com/2059/1498488199_e7ca85916e.jpg?v=0
C:\>Pause
Drücken Sie eine beliebige Taste . . .
Du musst den zusätzlichen Eintrag woanders erzeugen bzw hinzufügen.
Mit freundlichem Gruß
Micha
Hallo,
danke für deine Mühe. Ich habe den Fehler gefunden. Auf der eingelesenen HTML-Seite befindet sich der erste Link stets zwei Mal.
Markus