*Markus: Matcher.find() findet 1. Treffer immer doppelt?

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

  1. 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

    1. 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