java 解析域名得到host

// 形如https://www.baidu.com 或 www.baidu.com, 判断这两种情况,并解析前者去掉http头,传入domain host

// 方案1:正则表达式 + URI解析方法

import java.io.IOException;
import java.net.URI;
import java.net.URL;
import java.util.regex.Pattern;

public class Main {

    public static void main(String[] args) {
        System.out.println("Hello World!");
//        parseDomain();
        String url = "www.baidu.com";
        String domain = parseDomain(url);
        System.out.println("+++domain: " + domain);
    }

    public static boolean verifyDomain(String url) {
        String regex = "^([hH][tT]{2}[pP]:/*|[hH][tT]{2}[pP][sS]:/*|[fF][tT][pP]:/*)(([A-Za-z0-9-~]+).)+([A-Za-z0-9-~\/])+(\?{0,1}(([A-Za-z0-9-~]+\={0,1})([A-Za-z0-9-~]*)\&{0,1})*)$";
        Pattern pattern = Pattern.compile(regex);
        if (pattern.matcher(url).matches()) {
            System.out.println("是正确的网址");
            return true;
        } else {
            System.out.println("非法网址");
            return false;
        }
    }

    private static String parseDomain(String url) {
        String regex = "^([hH][tT]{2}[pP]:/*|[hH][tT]{2}[pP][sS]:/*|[fF][tT][pP]:/*)(([A-Za-z0-9-~]+).)+([A-Za-z0-9-~\/])+(\?{0,1}(([A-Za-z0-9-~]+\={0,1})([A-Za-z0-9-~]*)\&{0,1})*)$";
        Pattern pattern = Pattern.compile(regex);
        if (pattern.matcher(url).matches()) {
       return URI.create(url).getHost();
        } else {
       return url;
        }
    }

    public static void parseDomain() throws IOException {
        String urlAddress = "http://www.roseindia.net/jsf/JSFLoginApplication.shtml";
        urlAddress = "http://www.baidu.com";
        URL url = new URL(urlAddress);
        System.out.println("url.getHost() = " + url.getHost());
        System.out.println("url.getPath() = " + url.getPath());
        System.out.println("url.getPort() = " + url.getPort());
        System.out.println("url.getProtocol() = " + url.getProtocol());
    }
}

// 方案2: String的split(), substring(), 拆解出子串来

一般的URL的结构:

[ 协议名 ]:// [ 域名 ] : [ 端口号 ] / [ 路 ] ... [ 径 ]/ [ 文件名 ] ? [ 参 ]& [ 数 ] & [ 部 ]& [ 分 ] # [ 锚部分 ]

js代码如下:

function parseURL(url){
var urlObj={};
urlObj.scheme = url.substring(0,url.indexOf(":")); //协议头
var temp1=url.substring(url.indexOf("//")+2); //去掉协议头后剩下部分
var temp2=temp1.substring(0,temp1.indexOf("/"))//域名+端口号,substring(start,stop) stop要比最后一个提取的字符位置多1
urlObj.domaine = temp2.substring(0,temp1.indexOf(":"));
urlObj.port = temp2.substring(temp1.indexOf(":")+1);

if(temp1.indexOf("?")!=-1){
urlObj.path =temp1.substring(temp1.indexOf("/")+1,temp1.indexOf("?"))//路径+文件名
emp1.IndexOf("#")!=-1? urlObj.params=temp1.substring(temp1.indexOf("?")+1,temp1.IndexOf("#"))
      :urlObj.params=temp1.substring(temp1.indexOf("?")+1)
}else{
urlObj.path =temp1.substring(temp1.indexOf("/")+1);
}
urlObj.fragment=temp1.substring(temp1.indexOf("#")+1);
return urlObj;
}

原文地址:https://www.cnblogs.com/bluestorm/p/10338028.html