首先说明一下,以下是我第一篇技术博客,这阵子忙着一个二维码扫描项目,用到从扫描结果中判断是否网址从而用默认的浏览器打开,以下代码是我从一个二维码的
开源项目中提取出来的,像我这样刚开始接触安卓不久的初学者,可能对你有用,尝试过可以方便使用,希望大家一起来讨论讨论;
//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,方法具体如上
android中uri/网址的识别方法
最新推荐文章于 2023-01-13 09:43:28 发布