Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/383.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
我是否只检查带有此java代码的URL链接?_Java_Url_Hyperlink - Fatal编程技术网

我是否只检查带有此java代码的URL链接?

我是否只检查带有此java代码的URL链接?,java,url,hyperlink,Java,Url,Hyperlink,我有一个方法,可以接收URL并查找该页面上的所有链接。 然而,我担心的是,如果它只是采取的链接,当我检查链接是否工作,有些链接似乎奇怪。 例如,如果我在www.google.com上查看链接,我会得到6个断开的链接,它们不返回http状态码,而是说断开的链接没有“协议”。 我无法想象谷歌的主页上会有任何断开的链接。 其中一个断开链接的示例是:/preferences?hl=en 我在谷歌主页上看不到这个链接。 我很好奇我是否只检查了链接,或者我是否可能提取了不应该是链接的代码 以下是检查URL链

我有一个方法,可以接收URL并查找该页面上的所有链接。 然而,我担心的是,如果它只是采取的链接,当我检查链接是否工作,有些链接似乎奇怪。 例如,如果我在www.google.com上查看链接,我会得到6个断开的链接,它们不返回http状态码,而是说断开的链接没有“协议”。 我无法想象谷歌的主页上会有任何断开的链接。 其中一个断开链接的示例是:/preferences?hl=en 我在谷歌主页上看不到这个链接。 我很好奇我是否只检查了链接,或者我是否可能提取了不应该是链接的代码

以下是检查URL链接的方法:

public static List getLinks(String uriStr) {

    List result = new ArrayList<String>();
    //create a reader on the html content
    try{
        System.out.println("in the getlinks try");
    URL url = new URI(uriStr).toURL();
    URLConnection conn = url.openConnection();
    Reader rd = new InputStreamReader(conn.getInputStream());

    // Parse the HTML
    EditorKit kit = new HTMLEditorKit();
    HTMLDocument doc = (HTMLDocument)kit.createDefaultDocument();
    kit.read(rd, doc, 0);

    // Find all the A elements in the HTML document
    HTMLDocument.Iterator it = doc.getIterator(HTML.Tag.A);
    while (it.isValid()) {
        SimpleAttributeSet s = (SimpleAttributeSet)it.getAttributes();

        String link = (String)s.getAttribute(HTML.Attribute.HREF);
        if (link != null) {
                // Add the link to the result list
                System.out.println(link);
            //System.out.println("link print finished");
            result.add(link);
        }
        //System.out.println(link);
        it.next();
    }
    }
公共静态列表getLinks(字符串uriStr){
列表结果=新建ArrayList();
//在html内容上创建一个阅读器
试一试{
System.out.println(“在getlinks中尝试”);
URL=新URI(uriStr.toURL();
URLConnection conn=url.openConnection();
Reader rd=新的InputStreamReader(conn.getInputStream());
//解析HTML
EditorKit=新的HTMLEditorKit();
HTMLDocument doc=(HTMLDocument)kit.createDefaultDocument();
套件读取(rd,doc,0);
//查找HTML文档中的所有A元素
HTMLDocument.Iterator it=doc.getIterator(HTML.Tag.A);
while(it.isValid()){
SimpleAttributeSet s=(SimpleAttributeSet)it.getAttributes();
字符串链接=(字符串)s.getAttribute(HTML.Attribute.HREF);
如果(链接!=null){
//将链接添加到结果列表
System.out.println(链接);
//System.out.println(“链接打印完成”);
结果。添加(链接);
}
//System.out.println(链接);
it.next();
}
}

您返回的链接没有问题

查看您的代码,您正在提取
href
属性,在您的示例中,该属性来自元素:

<a  class=gbmt href="/preferences?hl=en">Search settings</a>

如果url是相对的,您只需要调整代码来预先设置方法的参数。

谢谢,我知道您的意思,我只是不知道如何编码。如果(link!=uriStr+the href)将url添加到链接的前面。类似这样的操作吗?我会这样做:
如果(!“http.”regionMatches(true,0,link,0,4)){link=uriStr+link;}
。这样你就不必担心区分大小写的链接或少于4个字符的HREF。不必感到抱歉。很高兴能提供帮助:)所以它工作正常,但我输入的url遇到了问题。这是错误消息:java.lang.NullPointerException在java.lang.String.regionMatches的线程“main”java.lang.NullPointerException中出现异常(String.java:1196)在LinkChecker.getLinks(LinkChecker.java:129)在LinkChecker.main(LinkChecker.java:43)如果
link
null
,则会发生这种情况。如果(link!=null&&!“http.regionMatches(true,0,link,0,4)),则始终可以将条件更改为
啊,好的,链接是空的。谢谢,我不明白这个问题。
http://www.google.com/preferences?hl=en