android java 如何判断一个url地址为有效url

Android检测url地址是否可达的两种方法 今天小编就为大家分享一篇Android检测url地址是否可达的两种方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧 立即下载

我们在android 和java开发中可能会遇到一个问题,就是判断用户输入的url或者从网页或其他地方复制来的url是否为一个有效的url,下面是一些方法,供大家参考:

在没有encode的情况下可以使用下面方法

[java]  view plain  copy
  1. URI uriObj = new URI(url);  

这个方法来进行判定,如果该方法抛出异常URISyntaxException,那么就说明这个url不是一个正确的url,不过当遇到一个url地址中包含字符串^的时候,也会抛出异常,可以这个含有^的链接却是一个有效的地址,比如百度中的某些地址,因此可以通过下面的代码进行改进:

[java]  view plain  copy
  1. URL urlObj = new URL(url);  
  2. URI uriObj = new URI(urlObj.getProtocol(), urlObj.getHost(), urlObj.getPath(), urlObj.getQuery(), null);  
这两个方法分别会抛出MalformedURLException和URISyntaxException.

不过如果你想对一些schemes进行限制,可以加入以下代码:

[java]  view plain  copy
  1. private static final String acceptableSchemes[] = {  
  2.         "http:",  
  3.         "https:",  
  4.         "file:"  
  5. };  
  6.   
  7. private static boolean urlHasAcceptableScheme(String url) {  
  8.     if (url == null) {  
  9.         return false;  
  10.     }  
  11.   
  12.     for (int i = 0; i < acceptableSchemes.length; i++) {  
  13.         if (url.startsWith(acceptableSchemes[i])) {  
  14.             return true;  
  15.         }  
  16.     }  
  17.     return false;  
  18. }  
  19.   
  20. private String isValidUrl(String incommingString) throws Exception{  
  21.     String url = "";  
  22.     URL urlObj = new URL(incommingString);  
  23.     URI uriObj = new URI(urlObj.getProtocol(), urlObj.getHost(), urlObj.getPath(), urlObj.getQuery(), null);  
  24.     String scheme = uriObj.getScheme();  
  25.     if (!urlHasAcceptableScheme(incommingString)) {  
  26.         if (scheme != null) {  
  27.             throw new URISyntaxException("", "");  
  28.         }  
  29.     }  
  30.     //此处需要对url进行赋值操作,例如需要加http://等  
  31. p;       return url;  
  32. }  

对于android开发,还可以以这样处理:

[java]  view plain  copy
  1. import android.util.Patterns;//android包下的  
  2.   
  3. if (Patterns.WEB_URL.matcher(searchContent).matches()) {  
  4.      //符合标准  
  5. } else{  
  6.      //不符合标准  
  7. }  

接下来提供一个完整的封装类,不但提供了对url的校验,还对url的大部分信息进行了封装操作,代码如下:

[java]  view plain  copy
  1. package 随便写;  
  2.   
  3. import static android.util.Patterns.GOOD_IRI_CHAR;  
  4.   
  5. import java.util.Locale;  
  6. import java.util.regex.Matcher;  
  7. import java.util.regex.Pattern;  
  8.   
  9. public class WebAddress {  
  10.   
  11.     private String mScheme;  
  12.     private String mHost;  
  13.     private int mPort;  
  14.     private String mPath;  
  15.     private String mAuthInfo;  
  16.   
  17.     static final int MATCH_GROUP_SCHEME = 1;  
  18.     static final int MATCH_GROUP_AUTHORITY = 2;  
  19.     static final int MATCH_GROUP_HOST = 3;  
  20.     static final int MATCH_GROUP_PORT = 4;  
  21.     static final int MATCH_GROUP_PATH = 5;  
  22.   
  23.     /* ENRICO: imported the ParseExeption here */  
  24.     public static class ParseException extends RuntimeException {  
  25.         public String response;  
  26.   
  27.         ParseException(String response) {  
  28.             this.response = response;  
  29.         }  
  30.     }  
  31. //根据正则表达式进行判断  
  32.     static Pattern sAddressPattern = Pattern.compile(  
  33.             /* scheme    */ "(?:(http|https|file)\\:\\/\\/)?" +  
  34.             /* authority */ "(?:([-A-Za-z0-9$_.+!*'(),;?&=]+(?:\\:[-A-Za-z0-9$_.+!*'(),;?&=]+)?)@)?" +  
  35.             /* host      */ "([" + GOOD_IRI_CHAR + "%_-][" + GOOD_IRI_CHAR + "%_\\.-]*|\\[[0-9a-fA-F:\\.]+\\])?" +  
  36.             /* port      */ "(?:\\:([0-9]*))?" +  
  37.             /* path      */ "(\\/?[^#]*)?" +  
  38.             /* anchor    */ ".*", Pattern.CASE_INSENSITIVE);  
  39.   
  40.     /** parses given uriString. */  
  41. //用法:将需要判断的url传入,new WebAddress(address) 如果抛出异常,则会出现问题  
  42.  public WebAddress(String address) throws ParseException {  
  43.         if (address == null) {  
  44.             throw new NullPointerException();  
  45.         }  
  46.   
  47.         // android.util.Log.d(LOGTAG, "WebAddress: " + address);  
  48.   
  49.         mScheme = "";  
  50.         mHost = "";  
  51.         mPort = -1;  
  52.         mPath = "/";  
  53.         mAuthInfo = "";  
  54.   
  55.         Matcher m = sAddressPattern.matcher(address);  
  56.         String t;  
  57.         if (m.matches()) {  
  58.             t = m.group(MATCH_GROUP_SCHEME);  
  59.             if (t != null) mScheme = t.toLowerCase(Locale.getDefault());  
  60.             t = m.group(MATCH_GROUP_AUTHORITY);  
  61.             if (t != null) mAuthInfo = t;  
  62.             t = m.group(MATCH_GROUP_HOST);  
  63.             if (t != null) mHost = t;  
  64.             t = m.group(MATCH_GROUP_PORT);  
  65.             if (t != null && t.length() > 0) {  
  66.                 // The ':' character is not returned by the regex.  
  67.                 try {  
  68.                     mPort = Integer.parseInt(t);  
  69.                 } catch (NumberFormatException ex) {  
  70.                     throw new ParseException("Bad port");  
  71.                 }  
  72.             }  
  73.             t = m.group(MATCH_GROUP_PATH);  
  74.             if (t != null && t.length() > 0) {  
  75.                 /* handle busted myspace frontpage redirect with 
  76.                    missing initial "/" */  
  77.                 if (t.charAt(0) == '/') {  
  78.                     mPath = t;  
  79.                 } else {  
  80.                     mPath = "/" + t;  
  81.                 }  
  82.             }  
  83.   
  84.         } else {  
  85.             // nothing found... outa here  
  86.             throw new ParseException("Bad address");  
  87.         }  
  88.   
  89.         /* Get port from scheme or scheme from port, if necessary and 
  90.            possible */  
  91.         if (mPort == 443 && mScheme.equals("")) {  
  92.             mScheme = "https";  
  93.         } else if (mPort == -1) {  
  94.             if (mScheme.equals("https"))  
  95.                 mPort = 443;  
  96.             else  
  97.                 mPort = 80; // default  
  98.         }  
  99.         if (mScheme.equals("")) mScheme = "http";  
  100.     }  
  101.   
  102.     @Override  
  103.     public String toString() {  
  104.         String port = "";  
  105.         if ((mPort != 443 && mScheme.equals("https")) ||  
  106.             (mPort != 80 && mScheme.equals("http"))) {  
  107.             port = ":" + Integer.toString(mPort);  
  108.         }  
  109.         String authInfo = "";  
  110.         if (mAuthInfo.length() > 0) {  
  111.             authInfo = mAuthInfo + "@";  
  112.         }  
  113.   
  114.         return mScheme + "://" + authInfo + mHost + port + mPath;  
  115.     }  
  116.   
  117.     public void setScheme(String scheme) {  
  118.       mScheme = scheme;  
  119.     }  
  120.   
  121.     public String getScheme() {  
  122.       return mScheme;  
  123.     }  
  124.   
  125.     public void setHost(String host) {  
  126.       mHost = host;  
  127.     }  
  128.   
  129.     public String getHost() {  
  130.       return mHost;  
  131.     }  
  132.   
  133.     public void setPort(int port) {  
  134.       mPort = port;  
  135.     }  
  136.   
  137.     public int getPort() {  
  138.       return mPort;  
  139.     }  
  140.   
  141.     public void setPath(String path) {  
  142.       mPath = path;  
  143.     }  
  144.   
  145.     public String getPath() {  
  146.       return mPath;  
  147.     }  
  148.   
  149.     public void setAuthInfo(String authInfo) {  
  150.       mAuthInfo = authInfo;  
  151.     }  
  152.   
  153.     public String getAuthInfo() {  
  154.       return mAuthInfo;  
  155.     }  
  156. }  
android 判断网络是否可用与连接的网络是否能上网 下面小编就为大家分享一篇android 判断网络是否可用与连接的网络是否能上网,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧 立即下载

相关推荐

从ADC校准到精准测量:避开PY32F030小信号采样的那些坑

本文深入探讨了PY32F030微控制器进行ADC小信号采样时面临的挑战与解决方案。从硬件设计、软件滤波算法到系统级校准策略,详细分析了如何避开常见陷阱,实现精准测量,特别是在25mV以下小信号场景中的应用实践。

ujm567890的博客 759

Java检测网络是否连通检查ip、URL和API接口

Java检测网络是否连通检查ip、URL和API接口

质量不太好的博客 5080

Mathcad在LLC谐振变换器设计中的公式推导实战

本文通过Mathcad软件,详细演示了LLC谐振变换器设计的核心公式推导实战。文章阐述了如何利用Mathcad作为“会思考的草稿纸”,从定义基本参数、应用基波近似法(FHA)模型,到逐步推导电压增益公式及确定工作边界频率(fmin, fmax),并展示了如何通过动态参数扫描进行优化设计,帮助电源工程师高效、直观地完成理论计算,为后续仿真与实现奠定坚实基础。

q1w3e5r7t9y的博客 297

Android检测url地址是否可达

方法一try{ URL url = new URL(address); HttpURLConnection conn = (HttpURLConnection)url.openConnection(); conn.setUseCaches(false); conn.setInstanceFollowRedirects(true); conn.setConnec

Q1009355422的专栏 4315

拉普拉斯矩阵

1、预备知识 拉普拉斯矩阵定义为:L=D-W。其中,D为度矩阵,W为权重矩阵。 (1)D是对角矩阵,对角线上的元素时节点的度,即所有与该节点相关联的边的权重之和;对角线以外的元素为0。有向图的对角矩阵分为 出度矩阵 和 入度矩阵。 图1.1 无向图中的度矩阵 (2)W在无向图中是对称矩阵,在有向图中是非对称矩阵。 ...

zzhe 1万+

海思方案定制hi3531dv200/SS528 DVR方案解析:从硬件选型到编解码实战应用

海思方案,Hi3518EV100,Hi3518CV100,Hi3515CV100,Hi3516CV100,Hi3516ECV100,Hi3516D,Hi3516A,Hi3519,Hi3520D,Hi3521A,Hi3535,Hi3531,Hi3536,Hi3536C,Hi3536D,Hi3518EV200,Hi3518EV201,Hi3520DV200,Hi3516CV200,Hi3516CV300,Hi3516AV200,Hi3520DV300,Hi3519V101,sd3403,hi3519av200

1585

android 调用java url地址_android java 如何判断一个url地址为有效url

我们在android 和java开发中可能会遇到一个问题,就是判断用户输入的url或者从网页或其他地方复制来的url是否为一个有效的url,下面是一些方法,供大家参考:在没有encode的情况下可以使用下面方法URI uriObj = new URI(url);这个方法来进行判定,如果该方法抛出异常URISyntaxException,那么就说明这个url不是一个正确的url,不过当遇到一个url...

weixin_42358594的博客 405

C# NX二次开发:两种过滤器设置方案的实战解析与场景适配

本文深入解析C# NX二次开发中的两种过滤器设置方案:AddFilterHandler回调与MaskTriple属性设置。通过实战案例对比其性能差异与适用场景,帮助开发者根据需求选择最优方案,提升NX插件开发效率与交互体验。特别针对BlockStyler集成场景提供专业建议,是NX二次开发者的实用指南。

weixin_33739646的博客 844

android 判断地址后缀

Android 中判断地址后缀的科普 在现代应用中,地址的后缀通常代表了资源的类型,比如图片、视频、文本文件等。因此,判断一个地址的后缀在进行文件处理、网络请求等方面具有重要意义。在Android开发中,我们可以通过简单的代码来判断一个地址的后缀,下面将介绍如何实现这一功能。 地址后缀判断的原理 后缀通常是URL中最后一个...

weixin_35501172的博客 150

mojoPortal 路径穿越漏洞复现(CVE-2025-28367)(附脚本)

 在 mojoPortal CMS 版本 <=2.9.0.1 中发现了一个导致 ViewState 反序列化的目录遍历漏洞。通过利用此问题,未经身份验证的攻击者可以泄露 Web 根目录中的敏感文件,包括应用程序的文件。此配置文件包含用于验证和解密 ViewState 数据的文件。知道此密钥后,网络攻击者可以构建恶意 ViewState 有效负载,从而导致在底层服务器上执行远程代码。(CVE-2025-28367)

iSee857的博客 500

pycharm下载continue插件接入DeepSeek的API,向其提问输出乱码,如何解决?

🏆本文收录于 《全栈Bug调优(实战版)》 专栏,该专栏专注于分享我在真实项目开发中遇到的各类疑难Bug及其深层成因,并系统提供高效、可复现的解决思路和实操方案。无论你是刚入行的新手开发者,还是拥有多年项目经验的资深工程师,本专栏都将为你提供一条系统化、高质量的问题排查与优化路径,助力你加速成长,攻克技术壁垒,迈向技术价值最大化与职业发展的更高峰🚀!

**My Coding Family** 2220

Soot检测Android应用中URL地址

Soot简介Soot是一个Java静态分析框架,它提供了四种中间(representation)表现用于分析与转换Java字节码.Soot既可以作为优化和检查class文件的工具也可以作为一个开发与优化Java字节码的框架。使用Soot可以对Android应用进行静态分析,Android静态分析指APK不在运行的情况下,根据某些代码特征来分析应用具有哪些行为。代码实现工程依赖的jar包gradle...

不忘初心的专栏 1592

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

Java/Android中URL地址合法性的判断

今天在Android开发中遇到这样一个问题,在输入一个url地址后,如何判断该url地址是否合法。在网上找了很多相关的博客,大多是从正则表达式或者HttpURLConnection的角度解决,试了下,效果并不好,且不够方便。最终找到了解决方法。使用Apache Commons Validator第三方库能够很方便地解决。

进击的小怪兽 9533

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

最新有效的rtsp流媒体测试地址

最新有效的rtsp流媒体测试地址

小北的博客 9万+

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

19.安卓逆向2-frida hook技术-HookOkHttp的URL和请求头

安卓逆向 安卓协议分析 app协议分析 保姆级攻略 app逆向 Android apk逆向 Frida

计算机王的博客 1631

安卓进阶之 retrofit 动态切换URL地址

我们在开发的过程中,有时候会遇见需要动态切换URL的这种需求,借此记录一下。 首先贴出代码。 package com.example.administrator.mytestretrofit.http; import android.util.Log; import com.example.mylibrary.app.Constants; import com.example.admin...

weixin_37166398的博客 9997

android 调用java url地址_如何在android中打开url

以下代码将帮助您在应用中打开网址:import android.app.Activity;import android.os.Bundle;import android.webkit.WebView;import android.webkit.WebViewClient;import android.widget.Toast;public class AppWebViewActivity exte...

weixin_42299244的博客 448

Android 信息中URL地址识别问题

前言          欢迎大家我分享和推荐好用的代码段~~ 声明          欢迎转载,但请保留文章原始出处:          优快云:http://www.youkuaiyun.com          雨季o莫忧离:http://blog.youkuaiyun.com/luckkof 正文   [DESCRIPTION] 在短信中存在URL识别不准确问题,包括大写字母无法识别、与

奥特曼 4895

安卓自动更新功能实现+安卓调用默认浏览器打开指定URL

import android.app.Activity; import android.content.Intent; import android.net.Uri; import android.os.Bundle; import android.view.View; import android.view.View.OnClickListener; import android.widget.

彦文的专栏 1万+

安卓 获取重定向Url最终地址

  String Url = "http://suo.im/5phIx5"; // 重定向url WebTool.GetRedirectUrl(context, Url, new CallBackUrl() { @Override public void F(String lastUrl) { // lastUrl为重定向的最终地址 } }); pack...

暂无内容 3万+

Android如何获取指定url的ip地址

public static void main(String[] args) { String hostName=”www.cnblogs.com”; //getByName接收的是主机名,而不是URL,主机名只是URL的一部分 InetAddress addr; try {

and_bjdbc的博客 1546

java.io.file url,Android的URL连接java.io.FileNotFoundException

如果我开这跟我的Web浏览器的一切工作正常。如果我通过Android应用程序打开它,则会抛出java.io.FileNotFoundException。Android的代码:class SendComment extends AsyncTask {protected String doInBackground(String... urls) {String _output = null;try {...

weixin_33547979的博客 371
上一篇: Zxing库的使用及拓展(自动变焦)
下一篇: Android 保存资源文件中的图片到本地相册,并实时刷新的实现方法!
一往无前-千夜
博客等级 码龄10年 357粉丝 365原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值