我想从每个行的文件中读取并仅编辑从特定服务器提供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
(我只想编辑示例的前两行)
答案 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()'。
此外,您不应该写重复的正斜杠。这个字符'/'是向前的,而不是斜杠。