androidは文字列が合法的なドメイン名かどうかを検出します.

3641 ワード

今日は、Androidに入力された文字列が合法的なドメイン名であるかどうかを簡単に説明します.
これは昨日多くの資料を検索しましたが、要求に合うコードがほとんど見つかりませんでした.その後、多くの時間をかけて、問題を解決しました.ここにメモしてください.
一.ドメイン名の入力が適法かどうかチェックします.
具体的なコードは簡単です.
   
    public static boolean isURL2(String str){
        String regex = "^((https|http|ftp|rtsp|mms)?://)"  
                + "?(([0-9a-z_!~*'().&=+$%-]+: )?[0-9a-z_!~*'().&=+$%-]+@)?" //ftp user@  
               + "(([0-9]{1,3}\\.){3}[0-9]{1,3}" // IP   URL- 199.194.52.184  
                 + "|" //   IP DOMAIN(  ) 
                 + "([0-9a-z_!~*'()-]+\\.)*" //   - www.  
//                 + "([0-9a-z][0-9a-z-]{0,61})?[0-9a-z]\\." //       
                + "[a-z]{2,6})" // first level domain- .com or .museum  
                + "(:[0-9]{1,4})?" //   - :80  
                + "((/?)|" // a slash isn't required if there is no file name  
                + "(/[0-9a-z_!~*'().;?:@&=+$,%#-]+)+/?)$";  
        return match( regex ,str );


    }
   /**
     * @param regex
     *         
     * @param str
     *        
     * @return   str    regex        ,  true,      false;
     */
    private static boolean match(String regex, String str) {
        Pattern pattern = Pattern.compile(regex);
        Matcher matcher = pattern.matcher(str);
        return matcher.matches();
    }
これは基本的に正規表現で文字列が合法的なドメイン名であるかどうかを検証したり、入力されたIPが合法的かどうかをチェックしたりすることができますが、ドメイン名がアクセスできるかどうかは保証されていません.インターネットではドメイン名の確認が多く、アクセスできるコードも簡単です.
二.入力したドメイン名がアクセスできるかどうかを判断する.
方法1:
import java.io.InputStream;
import java.net.URL;


public class Test {
public static void main(String[] args) {
	URL url;
	try {
	     url = new URL("http://www.baidu.com");
	     InputStream in = url.openStream();
	     System.out.println("    ");
	} catch (Exception e1) {
	     System.out.println("     !");
	     url = null;
	}
}
}
方法は、java.netの下のURLクラスを使用して実現され、URLは統一リソース識別子の参照であり、一つのURLインスタンスはurlの参照を表し、そしてURLの中のopenStream()方法を使用する.
方法二:
import java.net.HttpURLConnection;
import java.net.URL;

/**
*      :URLAvailability.java
*       :     URL      
* @author Jason
* @time   2010-9-14 
* 
*/
public class URLAvailability {
private static URL url;
private static HttpURLConnection con;
private static int state = -1;

/**
   *   :    URL          ,
   *   :       5  ,    5      ,        
   * @param urlStr   URL    
   * @return URL
   */
public synchronized URL isConnect(String urlStr) {
   int counts = 0;
   if (urlStr == null || urlStr.length() <= 0) {                       
    return null;                 
   }
   while (counts < 5) {
    try {
     url = new URL(urlStr);
     con = (HttpURLConnection) url.openConnection();
     state = con.getResponseCode();
     System.out.println(counts +"= "+state);
     if (state == 200) {
      System.out.println("URL  !");
     }
     break;
    }catch (Exception ex) {
     counts++; 
     System.out.println("URL   ,    "+counts+"  ");
     urlStr = null;
     continue;
    }
   }
   return url;
}
public static void main(String[] args) {
	URLAvailability u=new URLAvailability();
	u.isConnect("http://www.baidu.com");
}
}
方法2は、java.net下のURLとHttpURLConnectionの2つのカテゴリーを使用して実現される.それはHttpURLConnectionの中のget ResonseCodeを使用しました.方法として、HttpURLConnection:典型的なHttpURLConnectionの例は要求を生成することができ、それは一つの方法を持っている.要求の応答状態が得られ、この方法は、それぞれ200 and 404であるintを返し、応答からコードを識別できない場合は−1に戻る.
and roidは文字列が合法的なドメイン名であるかどうかを検査して終了しました.
こんなに簡単です