功能描述
无需引入三方依赖 文本匹配网址(支持多个) 网址解析(包括协议、主机、路径、参数等)
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 ;
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) ) ; } 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 ) ; } 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) ; } } } public static String getProtocol ( String url) throws MalformedURLException { URL urlO = new URL ( url) ; return urlO. getProtocol ( ) ; } public static String getAuthority ( String url) throws MalformedURLException { URL urlO = new URL ( url) ; return urlO. getAuthority ( ) ; } public static String getHost ( String url) throws MalformedURLException { URL urlO = new URL ( url) ; return urlO. getHost ( ) ; } public static int getPort ( String url) throws MalformedURLException { URL urlO = new URL ( url) ; return urlO. getPort ( ) == - 1 ? urlO. getDefaultPort ( ) : urlO. getPort ( ) ; } public static String getFile ( String url) throws MalformedURLException { URL urlO = new URL ( url) ; return urlO. getFile ( ) ; } public static String getPath ( String url) throws MalformedURLException { URL urlO = new URL ( url) ; return urlO. getPath ( ) ; } public static String getQuery ( String url) throws MalformedURLException { URL urlO = new URL ( url) ; return urlO. getQuery ( ) ; } 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; } }