一个网址的java模式

时间:2011-11-08 09:36:20

标签: java string design-patterns matcher

我想从每个行的文件中读取并仅编辑从特定服务器提供URL的行...我的代码就像......

   Scanner ReadIsbn = new Scanner (new FileReader ("C:/Users/...."));        

    Pattern pat = Pattern.compile("http:////www.librarything.com//isbn//");

    while ( ReadIsbn.hasNextLine()){

        String line = ReadIsbn.nextLine();
        Matcher m = pat.matcher(line);
        if (m.matches() == true) {
            EDIT line....

        }

    }

}

它不起作用......实际上m.matches()总是假的.. 在我作为输入的文件中,有如下行:

1)   http://www.librarything.com/isbn/0-9616696-7-5.html
2)   http://www.librarything.com/isbn/0-86078-322-7.html
Cultural tourism : how the arts can help market tourism products, how 
blablabla

(我只想编辑示例的前两行)

2 个答案:

答案 0 :(得分:2)

您无需在模式中转义正斜杠。这应该

Pattern pat = Pattern.compile("http://www.librarything.com/isbn/");

另一个问题是matches方法尝试将模式与整个输入文本进行匹配。使用

 if (m.find()){
        EDIT line....
 }

如果你只是想在这里检查前缀,那么你也可以使用String#startsWith方法

答案 1 :(得分:1)

它不起作用,因为方法matches()匹配完整行。您应该将.*添加到模式的末尾

Pattern pat = Pattern.compile("http://www.librarything.com//isbn/.*");

或改为使用方法'find()'。

此外,您不应该写重复的正斜杠。这个字符'/'是向前的,而不是斜杠。