2012-05-11 3 views
0

Я хочу получить This imageurl.txt файл, от this source.txt, с программой. Если я пытаюсь использовать только «p» или «p2», то работает. Но оба этих шаблона, выписывают, ничего.Почему не работает эта java-программа?

import java.util.regex.Pattern; 
import java.util.regex.Matcher; 
import java.io.*; 

public class imageurl 
{ 
    public static void main(String[] args) 
      throws IOException 
    { 
    for (int i = 1; i < 5000; i++) 
     { 
     toContent(i); 
     Pattern p = Pattern.compile("cacheimages/(.*)[\"][ ]*target="); 
     Pattern p2 = Pattern.compile("</b>[ ]*[(](.*)[)]</div>"); 
     BufferedReader r = new BufferedReader(new FileReader("source\\source"+i+".txt")); 
     String line; 
     FileWriter writer = new FileWriter("imageurl\\imageurl"+i+".txt"); 
     while ((line = r.readLine()) != null) 
      { 
      Matcher m = p.matcher(line); 
      Matcher m2 = p2.matcher(line); 
      while (m.find()) 
      while (m2.find()) 
       { 
       String c = (m.group(1)); 
       String c2 = (m2.group(1)); 
       System.out.println("<name>"+c2+"</name>_<url>http://www.geocaching.hu/cacheimages/"+c+"</url>"+"\n"); 
       writer.write("<name>"+c2+"</name>_<url>http://www.geocaching.hu/cacheimages/"+c+"</url>"+"\n"); 
       } 
      } 
      writer.close(); 
     } 
    } 
    private static void toContent(int i) 
    { 
    } 
} 
+0

Вы не можете просто дублировать каждую строку. Вы случайно вложили два цикла while: 'while (m.find()) while (m2.find())' –

+0

Убедитесь, что вы понимаете основные понятия программирования и синтаксис языка * перед * вы сообщение здесь. –

+0

Что я могу сделать с дублирующейся линией? – gnagy

ответ

0

Если у вас есть для каждого m.find() один m2.find() то это нормально, если у вас есть только один while и if вместо второго while.

Иначе, если у вас есть больше m2.find() для одного m.find(), то вы должны проверить, если позиции m2.find() между двумя m.find() (правильной и следующим).

1

Проблема в том, что два выражения, которые вы соответствуете, не существуют в одной строке одновременно. Вам нужно прочитать сразу две строки, чтобы получить нужные результаты.

. . . 
String line2; 
while ((line = r.readLine()) != null) 
    Matcher m=p.matcher(line); 
    if (m.find()) { 
     if (line2 = r.readLine() != null) { 
      Matcher m2=p2.matcher(line); 
      if (m2.find()) { 
       String c=m.group(1); 
       String c2=m2.group(1); 
       String outmsg=String.format("<name>%s</name>_<url>http://www.geocaching.hu/cacheimages/%s</url>\n", c2, c); 
       System.out.print(outmsg); 
       writer.write(outmsg); 
      } 
     } 
     writer.close(); 
    } 
} 
+0

Я не знаю, как я могу это использовать. Может быть, вы можете отправить мне полный код? – gnagy

+0

@ phatfingers, я думаю, что вы сделали все возможное, чтобы привести эту лошадь к воде. Кстати, ссылки на ввод образца и желаемый результат больше не работают. –

Смежные вопросы