2012-08-11 146 views
1

我有一个文本文档,其中有一大堆形式为/courses/......./.../.. 的网址,从这些网址中我只想提取那些形式为/courses/.../lecture-notes的网址。意思是以/courses开头并以/lecture-notes结尾的网址。 有人会知道使用正则表达式或仅通过字符串匹配来完成此操作的好方法吗?使用java从文本文件中提取特定的url

回答

5

这里有一个选择:

Scanner s = new Scanner(new FileReader("filename.txt")); 

String str; 
while (null != (str = s.findWithinHorizon("/courses/\\S*/lecture-notes", 0))) 
    System.out.println(str); 

鉴于与内容filename.txt

Here /courses/lorem/lecture-notes and 
here /courses/ipsum/dolor/lecture-notes perhaps. 

上述片断输出

/courses/lorem/lecture-notes 
/courses/ipsum/dolor/lecture-notes 
+0

非常感谢你的一切帮助。 – anonuser0428 2012-08-11 21:07:30

1

假设你有每行1个网址, 可以 使用方法:

BufferedReader br = new BufferedReader(new FileReader("urls.txt")); 
    String urlLine; 
    while ((urlLine = br.readLine()) != null) { 
     if (urlLine.matches("/courses/.*/lecture-notes")) { 
      // use url 
     } 
    } 
+0

-1:* [...]我有一堆网址[*] *。 – aioobe 2012-08-11 19:49:09

+0

**描述中没有任何**排除处理网址。该检查在一个循环内。 – Reimeus 2012-08-11 19:52:35

+0

除非您解释如何通过令牌遍历文本令牌(或至少一行一行地),否则此答案不完整。 (另外,使用'matches'时不需要'^'和'$'。) – aioobe 2012-08-11 20:01:02

1

下面将返回中间部分(即:排除/courses//lectures-notes/

Pattern p = Pattern.compile("/courses/(.*)/lectures-notes"); 
Matcher m = p.matcher(yourStrnig); 

if(m.find()). 
    return m.group(1) // The "1" here means it'll return the first part of the regex between parethesis. 
相关问题