首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么不运行这个java程序呢?

为什么不运行这个java程序呢?
EN

Stack Overflow用户
提问于 2012-05-11 20:57:16
回答 2查看 142关注 0票数 0

我想用程序从this source.txt拿到This imageurl.txt文件。如果我只尝试使用"p“或"p2",那么就可以了。但这两种模式,都写出来了,什么都没有。

代码语言:javascript
复制
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)
    {
    }
}
EN

回答 2

Stack Overflow用户

发布于 2012-05-11 22:53:54

问题是您要匹配的两个表达式并不同时存在于同一行中。你需要一次读两行才能得到你想要的结果。

代码语言:javascript
复制
. . .
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();
    }
}
票数 1
EN

Stack Overflow用户

发布于 2012-05-11 21:51:34

如果你对每个m.find()都有一个m2.find(),那么如果你只有一个while和一个if,而不是第二个while,那也没问题。

否则,如果一个m.find()有更多的m2.find(),那么必须检查m2.find()的位置是否在两个m.find()之间(正确的一个和下一个)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10551816

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档