android中uri/网址的识别方法

首先说明一下,以下是我第一篇技术博客,这阵子忙着一个二维码扫描项目,用到从扫描结果中判断是否网址从而用默认的浏览器打开,以下代码是我从一个二维码的

开源项目中提取出来的,像我这样刚开始接触安卓不久的初学者,可能对你有用,尝试过可以方便使用,希望大家一起来讨论讨论;

//URIparseResult是一个uri解析类,比如从网址http://www.baidu.com中解析出来


public class URIparseResult {
       //type 是指定时URI类型 
       private String type;
       private String uri;
       public URIparseResult(String uri)
       {
    	   this.type="URI";
    	   this.uri=message(uri);
       }
      public String getType() {
		return type;
	}
	public String getUri() {
		return uri;
	}
	
	public String toString()
	{
		return uri;
	}

         //这个是核心方法,通过判断是否满足网址的格式
	public static String message(String uri)
      {
           
    	  int protocolEnd=uri.indexOf(':');
    	  if(protocolEnd<0)
    	  {
    		  uri="http://"+uri;
    	  }else if(isColonFollowedByPortNumber(uri,protocolEnd))
    	  {
    		  uri="http://"+uri;
    	  }else
    	  {
    		  uri=uri.substring(0,protocolEnd).toLowerCase()+uri.substring(protocolEnd);
    	  }
    	  return uri;
      }
      private static boolean isColonFollowedByPortNumber(String uri,int protocolEnd)
      {
    	  int nextSlash=uri.indexOf('/',protocolEnd+1);
    	  if(nextSlash<0)
    	  {
    		  nextSlash=uri.length();
    	  }
    	  if(nextSlash<=protocolEnd+1)
    	  {
    		  return false;
    	  }
    	  for(int x=protocolEnd+1;x<nextSlash;x++)
    	  {
    		  if(uri.charAt(x)<'0'||uri.charAt(x)>'9')
    		  {
    			  return false;
    		  }
    	  }
    	  return true;
      }
}
//这个是判断是否是URI的核心方法,如果是的话,方法parse中返回的是URIparseResult对象
public class URIResultparse {
	public URIparseResult parse(String rawText)
    {
    	
    	if(rawText!=null&&rawText.startsWith("URL:"))
    	{
    		rawText=rawText.substring(4);
    	}
    	if(!isBasicallyValidURI(rawText))
    	{
    		return null;
    	}
		return new URIparseResult(rawText);
    }
//判断是否满足网址的格式
    public static boolean isBasicallyValidURI(String uri)
    {
    	if(uri==null||uri.indexOf(' ')>=0||uri.indexOf('\n')>=0)
    	{
    		return false;
    	}
    	int period=uri.indexOf('.');
    	if(period>=uri.length()-2)
    	{
    		return false;
    	}
    	int colon=uri.indexOf(':');
    	if(period<0&&colon<0)
    	{
    		return false;
    	}
    	if(colon>=0)
    	{
    		if(period<0||period>colon)
    		{
    			for(int i=0;i<colon;i++)
    			{
    				char c=uri.charAt(i);
    				if((c<'a'||c>'z')&&(c<'A'||c>'Z'))
    				{
    					return false;
    				}
    			}
    		}else
    		{
    			if(colon>=uri.length()-2)
    			{
    				return false;
    			}
    			for(int i=colon+1;i<colon+3;i++)
    			{
    				char c=uri.charAt(i);
    				if(c<'0'||c>'9')
    					return false;
    			}
    		}
    	}
		return true;
    	
    }
}

归纳起来,首先通过类URIResultparse对象的parse方法判断是否是网址,如果不是返回null,如果是返回URIparseResult对象,而URIparseResult对象通过构造方法

来调用方法message(String uri)来获取uri,方法具体如上


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值