Java从指定的文本中提取URL

目标

本文旨在教会刚入行的开发者如何在Java中从指定的文本中提取URL。

步骤

步骤 描述
1 读取文本文件
2 提取URL
3 输出URL列表

代码实现

读取文本文件

首先,我们需要读取指定的文本文件。Java中可以使用BufferedReader类来实现。以下是读取文本文件的代码:

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;

public class TextReader {
    public static String readTextFile(String filePath) {
        StringBuilder content = new StringBuilder();
        
        try (BufferedReader br = new BufferedReader(new FileReader(filePath))) {
            String line;
            while ((line = br.readLine()) != null) {
                content.append(line);
                content.append(System.lineSeparator());
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
        
        return content.toString();
    }
}

上述代码中,readTextFile方法接受一个文件路径作为参数,并返回文件内容的字符串表示。它使用BufferedReaderFileReader来打开并读取文件。在读取每一行时,将其添加到StringBuilder中,并在行之间添加换行符。

提取URL

接下来,我们需要实现从文本中提取URL的逻辑。Java中可以使用正则表达式来匹配URL的模式。以下是提取URL的代码:

import java.util.ArrayList;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class UrlExtractor {
    public static List<String> extractUrls(String text) {
        List<String> urls = new ArrayList<>();
        
        String pattern = "(?i)\\b((https?|ftp|file)://|www\\.|ftp\\.)[-A-Z0-9+&@#/%?=~_|!:,.;]*[A-Z0-9+&@#/%=~_|]";
        Pattern urlPattern = Pattern.compile(pattern, Pattern.CASE_INSENSITIVE);
        Matcher urlMatcher = urlPattern.matcher(text);
        
        while (urlMatcher.find()) {
            String url = text.substring(urlMatcher.start(0), urlMatcher.end(0));
            urls.add(url);
        }
        
        return urls;
    }
}

上述代码中,extractUrls方法接受一个字符串作为参数,并返回提取到的URL列表。它使用正则表达式模式来匹配URL。在匹配到URL后,将其添加到URL列表中。

输出URL列表

最后,我们需要输出提取到的URL列表。以下是输出URL列表的代码:

import java.util.List;

public class Main {
    public static void main(String[] args) {
        String filePath = "path/to/text/file.txt";
        String text = TextReader.readTextFile(filePath);
        
        List<String> urls = UrlExtractor.extractUrls(text);
        
        for (String url : urls) {
            System.out.println(url);
        }
    }
}

上述代码中,main方法首先使用TextReader类从指定的文件路径中读取文本内容。然后,使用UrlExtractor类提取URL,并将其存储在urls列表中。最后,使用循环遍历urls列表,并将每个URL打印到控制台。

类图

以下是本文中涉及的类的类图:

classDiagram
    class TextReader{
        +String readTextFile(String filePath)
    }
    
    class UrlExtractor{
        +List<String> extractUrls(String text)
    }
    
    class Main{
        +void main(String[] args)
    }
    
    TextReader --> Main
    UrlExtractor --> Main

饼状图

以下是文本中URL的分布情况的饼状图:

pie
    " : 40
    " : 30
    "ftp://example.com" : 20
    "www.example.com" : 10

上述饼状图表示在提取的URL列表中,其中40%的URL以"

总结

本文通过表格和代码演示了从指定的文本中提取URL的完整流程。首先,使用TextReader类读取文本文件。