【问题标题】:Putting Jsoup abs:href results into an array and looping through the array将 Jsoup abs:href 结果放入数组并循环遍历数组
【发布时间】:2018-03-23 16:43:04
【问题描述】:

我在理解如何正确添加到数组时遇到了一些麻烦。我想要完成的是将 a 方法的结果添加到数组中,然后遍历数组。

这是我需要或假设我需要的示例:

数组{"websiteaddress","websiteaddress","websiteaddress","websiteaddress","websiteaddress"}

但我得到的是: 网址
网址
网址
网址
网址
网址

这是我正在使用的代码:

private static final String webSiteURL = "https://websitename.com/";

    //The path of the folder that you want to save the images to
    private static final String folderPath = "C://path/";

    private static final ArrayList<String> webPages = new ArrayList<>();

    public static String[] thisIsAStringArray = {"https://websitename.com/"};    
    public static String[] tempArray = new String[ thisIsAStringArray.length + 1 ];


    /**
     * 
     * Method description: 
     * Date: Mar 17, 2018
     * @param args
     * @return void
     */
        public static void main(String[] args) {

                String path = folderPath + getPageTitle(webSiteURL).replaceAll(" ", "-");




                pageLinks(webSiteURL);

                System.out.println(thisIsAStringArray);

                for(String web : thisIsAStringArray)
                {

                        for(int n = 0; n < thisIsAStringArray.length - 1; n++)
                    {

                        System.out.println(thisIsAStringArray[n]);
                        getPageTitle(web);

                        pageLinks(web);

                        creatDirectory(folderPath, getPageTitle(web));      
                        getsImagesAndSaves(path, web);
                        n++;

                    }
                }
            }

            /**
             * 
             * Method description: Get all the links on the page and put them into an array
             * Date: Mar 16, 2018
             * @param src
             * @return void
             */
            public static void pageLinks(String src)
            {
                try
                {
                    URL url = new URL(src);
                    Document doc = Jsoup.parse(url, 3*1000);
                    Elements links = doc.select("a[href]"); // a with href
                    for (Element link : links) 
                    {

                        System.out.println(link.attr("abs:href"));
                        String noHref = link.attr("abs:href");

                        for(int i = 0; i < thisIsAStringArray.length; i++)
                        {
                            tempArray[i] = thisIsAStringArray[i];

                        }
                        //thisIsAStringArray[i] = noHref;
                        tempArray[thisIsAStringArray.length] = noHref;

                    }

                    thisIsAStringArray = tempArray;


                }
                catch(Exception error)
                {
                    System.out.println(error + " Something went wrong getting the links!");
                }
            }
    }

任何帮助将不胜感激,并在此先感谢您!

【问题讨论】:

    标签: java html arrays arraylist jsoup


    【解决方案1】:

    您有 2 个数组:大小为 1 的 thisIsAStringArray 和大小为 2 的 tempArray。它们的大小是固定的,无法更改!现在你有一个循环:

    for (Element link : links) 
    {
        ...
        for(int i = 0; i < thisIsAStringArray.length; i++)
        {
            tempArray[i] = thisIsAStringArray[i];
        }
    }
    

    读取 - 对于您找到的每个链接,i 从零循环到一(这意味着内部循环内部i 将只有值 0),然后将链接添加到第一位(索引为 0)。
    您不能在运行时更改数组的大小。如果您无法提前知道您将拥有多少物品,则必须使用List。试试这样的:

    ArrayList<String> myList = new ArrayList<>();
    for (Element link : links)
        myList.add(link);
    

    【讨论】:

    • 非常感谢您的解释!工作得很好!你太棒了!
    猜你喜欢
    • 2015-07-31
    • 1970-01-01
    • 2018-01-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-13
    相关资源
    最近更新 更多