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 [email protected] 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;
    }

}
相关推荐
风象南18 分钟前
SpringBoot的4种死信队列处理方式
java·spring boot·后端
互联网全栈架构1 小时前
遨游Spring AI:第一盘菜Hello World
java·人工智能·后端·spring
优秀的颜2 小时前
计算机基础知识(第五篇)
java·开发语言·分布式
BillKu2 小时前
Java严格模式withResolverStyle解析日期错误及解决方案
java
网安INF2 小时前
ElGamal加密算法:离散对数难题的安全基石
java·网络安全·密码学
AWS官方合作商3 小时前
在CSDN发布AWS Proton解决方案:实现云原生应用的标准化部署
java·云原生·aws
gadiaola4 小时前
【JVM】Java虚拟机(二)——垃圾回收
java·jvm
coderSong25687 小时前
Java高级 |【实验八】springboot 使用Websocket
java·spring boot·后端·websocket
Mr_Air_Boy8 小时前
SpringBoot使用dynamic配置多数据源时使用@Transactional事务在非primary的数据源上遇到的问题
java·spring boot·后端
豆沙沙包?8 小时前
2025年- H77-Lc185--45.跳跃游戏II(贪心)--Java版
java·开发语言·游戏