Java网址url工具类

功能描述

  • 无需引入三方依赖
  • 文本匹配网址(支持多个)
  • 网址解析(包括协议、主机、路径、参数等)
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;}}

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/5178.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

行为学学习记忆实验和抗焦虑实验两款硬件

安徽耀坤XWX-BM八臂迷宫实验&#xff08;Eight-arm Maze Test&#xff0c;RMT&#xff09;由八个完全相同的臂组成&#xff0c;这些臂从一个中央平台放射出来&#xff0c;所以又被称为放射迷宫。其基本方式是&#xff1a;训练动物受食物的驱使对迷宫的各臂进行探究&#xff0c;…

xLua背包实践

准备工作 环境&#xff0c;代码 在C#代码方面我们需要准备单例模式基类&#xff0c;AB包管理器&#xff0c;lua解析器管理器 详情请见AB包管理器 xlua详解 然后是Xlua包和AB包&#xff0c;具体导入方法也在上面的链接中 然后是lua的三个文件 具体代码&#xff1a; JsonUtil…

SSH Config 后门 | Linux 后门系列

ssh 客户端配置文件加载顺序 命令行参数 > ~/.ssh/config > /etc/ssh/ssh_config Ubuntu server 16.04 默认 /etc/ssh/ssh_config # Host * # ForwardAgent no # ForwardX11 no # RhostsRSAAuthentication no # RSAAuthentication …

一、OSPF基础

目录 1.路由协议的优先级 2.转发原则&#xff1a;最长匹配原则 3.负载分担 4.路由备份&#xff08;浮动路由&#xff09; 5.路由协议的分类 6.动态路由 7.距离矢量路由协议&#xff08;BGP&#xff0c;RIP&#xff09; 8.链路状态路由协议&#xff08;OSPF&#xff0c;I…

SpringBoot配置HTTPS及开发调试

前言 在实际开发过程中&#xff0c;如果后端需要启用https访问&#xff0c;通常项目启动后配置nginx代理再配置https&#xff0c;前端调用时高版本的chrome还会因为证书未信任导致调用失败&#xff0c;通过摸索整理一套开发调试下的https方案&#xff0c;特此分享 后端配置 …

西瓜书学习——决策树形状、熵和决策树的本质

文章目录 决策树形状监督学习算法分类与回归 熵信息熵香农熵 (Shannon Entropy) - H(X)联合熵 (Joint Entropy) - H(X, Y)条件熵 (Conditional Entropy) - H(Y|X)互信息 (Mutual Information) - I(X; Y)相对熵 (Relative Entropy) / KL散度 (Kullback-Leibler Divergence) - DK…

misc学习

一.知识点 1.BMP文件 BMP文件主要有四部分组成&#xff0c;位图头、位图信息、调色板、位图数据。 bmp文件头(bmp file header)&#xff1a;提供文件的格式、大小等信息 位图信息头(bitmap information)&#xff1a;提供图像数据的尺寸、位平面数、压缩方式、颜色索引等信息…

JAVA顺序表相关习题1

1.笔试题:cvte str1 :welcome to cvte str2:come 描述:删除第一个字符串当中出现的所有的第二个字符串的字符!结果:wlt vt 要求 用ArrayList完成! public class Test {public static List<Character> findSameWords(String u1, String u2){List<Character> listn…

Sora新突破!AI生成电影迈向新阶段,配音版Sora登场!将如何改变影视行业?

Sora之后迎来新突破&#xff01; 配音版Sora来袭&#xff0c;AI生成电影又更近一步&#xff01; 在2024年伊始&#xff0c;人工智能界迎来了一次创新性的突破&#xff0c;由AI语音技术的先锋公司ElevenLabs带头实现。他们最近的成就体现在为OpenAI的Sora视频模型提供了令人动容…

tiktok如何影响用户行为的分析兼论快速数据分析的策略

tiktok如何影响用户行为的分析 快速数据分析的策略流程&#xff1a; 1.确定指标变量&#xff0c;也就确定了数据分析想要回答的问题。想回答不同的问题&#xff0c;就选择不同的指标变量。 变量筛选方法选出指标变量相关的变量&#xff1b; 针对筛选出的变量进行描述性分析和因…

【网站项目】家庭理财系统

&#x1f64a;作者简介&#xff1a;拥有多年开发工作经验&#xff0c;分享技术代码帮助学生学习&#xff0c;独立完成自己的项目或者毕业设计。 代码可以私聊博主获取。&#x1f339;赠送计算机毕业设计600个选题excel文件&#xff0c;帮助大学选题。赠送开题报告模板&#xff…

金三银四面试题(二十三):装饰器模式知多少?

什么是装饰器模式 装饰器模式&#xff08;Decorator Pattern&#xff09;是一种结构型设计模式&#xff0c;它允许动态地向对象添加新的行为&#xff0c;而无需修改原始对象的结构。通过将对象包装在一个或多个装饰器对象中&#xff0c;装饰器模式可以增强原始对象的功能。 装…

Python俄罗斯方块

文章目录 游戏实现思路1. 游戏元素的定义2. 游戏区域和状态的定义3. 游戏逻辑的实现4. 游戏界面的绘制5. 游戏事件的处理6. 游戏循环7. 完整实现代码 游戏实现思路 这个游戏的实现思路主要分为以下几个步骤&#xff1a; 1. 游戏元素的定义 Brick类&#xff1a;表示游戏中的砖…

SpringCloud学习笔记(三)Nacos配置管理与热更新、Feign远程调用替代RestTemplate

文章目录 前言6 Nacos配置管理6.1 在Nacos中添加配置文件6.2 微服务拉取配置6.3 配置热更新6.3.1 方式一&#xff1a;RefreshScope注解6.3.2 方式二&#xff1a;ConfigurationProperties注解 6.4 配置共享6.4.1 添加一个环境共享配置6.4.2 实现读取共享配置 6.5 配置共享的优先…

Agent AI智能体:未来社会的无形引领者

目录 前言1. 智能体说明1.1 定义1.2 作用1.3 类型介绍1.4 核心技术 2. 技术进步与创新2.1 机器学习的进步2.2 深度学习与神经网络2.3 强化学习2.4 转移学习与多任务学习2.5 自然语言处理(NLP)的革新2.6 知识图谱与推理 3. 行业领域应用场景3.1 游戏行业3.2 医疗健康3.3 金融服务…

【译】Celery文档1:First Steps with Celery——安装和配置Celery

https://docs.celeryq.dev/en/stable/getting-started/first-steps-with-celery.html#first-steps Celery的第一步 Celery时一个自带电池的任务队列。 本教程内容&#xff1a; 安装消息传输代理(broker)安装Celery并创建第一个任务(task)启动Celery工作进程(worker)并执行任务…

【Harmony3.1/4.0】笔记七-选项卡布局

概念 当页面信息较多时&#xff0c;为了让用户能够聚焦于当前显示的内容&#xff0c;需要对页面内容进行分类&#xff0c;提高页面空间利用率。Tabs组件可以在一个页面内快速实现视图内容的切换&#xff0c;一方面提升查找信息的效率&#xff0c;另一方面精简用户单次获取到的…

源码编译framework.jar 并成功导入android studio 开发

一、不同安卓版本对应路径 Android N/O: 7 和 8 out/target/common/obj/JAVA_LIBRARIES/framework_intermediates/classes.jar Android P/Q: 9 和 10 out/soong/.intermediates/frameworks/base/framework/android_common/combined/framework.jar Android R: 11以上 out/so…

第1章 手写WebServer

1.1 Web原理 1.1.1 Web概述 Web是指互联网上的万维网&#xff08;World Wide Web&#xff09;&#xff0c;是一个由超文本、超链接和多媒体内容组成的信息空间。Web的基础技术是HTTP协议、URL、HTML、CSS和JavaScript等。Web被广泛应用于信息检索、在线购物、社交媒体、在线游…

揭秘APP收益:养机流程带来的盈利秘诀

在这个高速发展的数字时代&#xff0c;手机应用&#xff08;APP&#xff09;已成为人们日常生活中不可或缺的工具。随着移动设备的普及和网络技术的不断进步&#xff0c;APP市场呈现出前所未有的活力和潜力。今天&#xff0c;我们将深入探讨一个特殊的高效APP运营模式——通过广…