Java网址url工具类

功能描述

  • 无需引入三方依赖
  • 文本匹配网址(支持多个)
  • 网址解析(包括协议、主机、路径、参数等)
java 复制代码
package com.qiangesoft.image.utils;

import org.springframework.util.Assert;
import org.springframework.util.CollectionUtils;

import java.net.MalformedURLException;
import java.net.URL;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.function.Consumer;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
 * url工具类
 *
 * @author qiangesoft
 * @date 2024-04-29
 */
public class UrlHelper {

    /**
     * 正则表达式
     */
    private static final Pattern PATTERN = Pattern.compile("((http|https|ftp):\\/\\/)?([\\w\\-]+\\.)+[\\w\\-]+(:[0-9]+)?(/[\\w\\[\\]\\-.~!*'();:@&=+$,/?#%]*)");

    public static void main(String[] args) throws MalformedURLException {
        String content = "8.97 复制打开抖音,看看【三融在东帝汶的作品】找个没人的地方. 然后一直躺到下午  https://v.douyin.com:8087/i2eTcJ82/?id=111&name=fsfe g@O.kP NwS:/ 06/18 ";
        List<String> list = UrlHelper.findAll(content);
        for (String s : list) {
            System.out.println(s);
        }

        String one = UrlHelper.findOne(content);
        System.out.println(UrlHelper.getProtocol(one));
        System.out.println(UrlHelper.getHost(one));
        System.out.println(UrlHelper.getPort(one));
        System.out.println(UrlHelper.getPath(one));
        System.out.println(UrlHelper.getFile(one));
        System.out.println(UrlHelper.getAuthority(one));
        System.out.println(UrlHelper.getQuery(one));
        System.out.println(UrlHelper.getQueryParam(one));
    }

    /**
     * 匹配第一个网址url
     *
     * @param content
     * @return
     */
    public static String findOne(String content) {
        Assert.notNull(content, "content must be not null !");

        List<String> list = findAll(content);
        return CollectionUtils.isEmpty(list) ? null : list.get(0);
    }

    /**
     * 匹配所有网址url
     *
     * @param content
     * @return
     */
    public static List<String> findAll(String content) {
        Assert.notNull(content, "content must be not null !");

        List<String> list = new ArrayList<>();
        findAll(content, (matcher) -> {
            list.add(matcher.group(0));
        });
        return list;
    }

    private static void findAll(String content, Consumer<Matcher> consumer) {
        if (null != content) {
            Matcher matcher = PATTERN.matcher(content);
            while (matcher.find()) {
                consumer.accept(matcher);
            }
        }
    }

    /**
     * 获取协议
     *
     * @param url
     * @return
     * @throws MalformedURLException
     */
    public static String getProtocol(String url) throws MalformedURLException {
        URL urlO = new URL(url);
        return urlO.getProtocol();
    }

    /**
     * 获取主机和端口号
     *
     * @param url
     * @return
     * @throws MalformedURLException
     */
    public static String getAuthority(String url) throws MalformedURLException {
        URL urlO = new URL(url);
        return urlO.getAuthority();
    }

    /**
     * 获取主机
     *
     * @param url
     * @return
     * @throws MalformedURLException
     */
    public static String getHost(String url) throws MalformedURLException {
        URL urlO = new URL(url);
        return urlO.getHost();
    }

    /**
     * 获取端口
     *
     * @param url
     * @return
     * @throws MalformedURLException
     */
    public static int getPort(String url) throws MalformedURLException {
        URL urlO = new URL(url);
        return urlO.getPort() == -1 ? urlO.getDefaultPort() : urlO.getPort();
    }

    /**
     * 获取文件名
     *
     * @param url
     * @return
     * @throws MalformedURLException
     */
    public static String getFile(String url) throws MalformedURLException {
        URL urlO = new URL(url);
        return urlO.getFile();
    }

    /**
     * 获取路径
     *
     * @param url
     * @return
     * @throws MalformedURLException
     */
    public static String getPath(String url) throws MalformedURLException {
        URL urlO = new URL(url);
        return urlO.getPath();
    }

    /**
     * 获取查询参数
     *
     * @param url
     * @return
     * @throws MalformedURLException
     */
    public static String getQuery(String url) throws MalformedURLException {
        URL urlO = new URL(url);
        return urlO.getQuery();
    }

    /**
     * 获取查询参数
     *
     * @param url
     * @return
     * @throws MalformedURLException
     */
    private static Map<String, String> getQueryParam(String url) {
        String regex = "(\\?|&+)(.+?)=([^&]*)";
        Pattern pattern = Pattern.compile(regex);
        Matcher matcher = pattern.matcher(url);
        Map<String, String> paramMap = new HashMap<>();
        while (matcher.find()) {
            String key = matcher.group(2);
            String value = matcher.group(3);
            paramMap.put(key, value);
        }
        return paramMap;
    }

}
相关推荐
弹简特3 分钟前
【Java项目-企悦抽】11-用户与认证模块-实现用户登录03(结束登录功能)-完成测试+对接前端+登录拦截器
java·开发语言
大模型丫丫30 分钟前
Loop Engineering:从强化学习视角看 Agent 循环的本质
java·人工智能·学习
数电发票API33 分钟前
税局接口,需要的来~~
java
骇客野人1 小时前
IntelliJ IDEA 使用技巧
java·ide·intellij-idea
Jul1en_1 小时前
【Java 脚手架】封装通用工具类-1
java·spring boot·分布式·spring·spring cloud
关于不上作者榜就原神启动那件事2 小时前
从 MDC 到 Agent:我手搓的文档路由协议,在 Spring AI Alibaba 里找到了正式实现
java·人工智能·spring·ai·agent
亦暖筑序2 小时前
重新认识 AgentScope-Java 2.0:ReActAgent 负责推理,HarnessAgent 负责运行
java·后端·agent
木井巳2 小时前
【DFS解决floodfill算法】岛屿的最大面积
java·算法·leetcode·深度优先
运维大师2 小时前
【K8S 运维实战】34-多集群管理Karmada
java·运维·kubernetes
林森lsjs2 小时前
完结撒花!Java SE 语法阶段总结!
java·开发语言