无法在Java中返回字符串
下面是我的Java代码。我正在尝试只解析链接的html文件。我发送了文件,并在parseURL下打印了数组,效果很好。但当我返回它并将其设置为parray时,parray突然全部为空。你知道为什么吗无法在Java中返回字符串,java,string,Java,String,下面是我的Java代码。我正在尝试只解析链接的html文件。我发送了文件,并在parseURL下打印了数组,效果很好。但当我返回它并将其设置为parray时,parray突然全部为空。你知道为什么吗 public String[] getWebPages(Document doc) throws IOException { Elements pages = doc.select("a[href]").not("a[href$=gz]").not("a[href$=jar").not("
public String[] getWebPages(Document doc) throws IOException
{
Elements pages = doc.select("a[href]").not("a[href$=gz]").not("a[href$=jar").not("a[href$=rar").not(
"a[href$=zip").not("a[href$=mdb").not("a[href$=doc").not("a[href$=docx").not("a[href$=odt").not(
"a[href$=pdf").not("a[href$=ppt").not("a[href$=pptx").not("a[href$=wks");
for (Element page : pages)
{
System.out.println("\nDownloading next page...");
String url = page.absUrl("href");
System.out.println(url);
parray = parseURL(url,page);
System.out.println(parray[0]);
System.out.println(parray[2]);
System.out.println(parray[3]);
System.out.println(parray[4]);
System.out.println(parray[5]);
System.out.println(parray[6]);
System.out.println(parray[7]);
System.out.println(parray[8]);
System.out.println(parray[9]);
}
return parray;
}
public String[] parseURL(String url, Element page)
{
Boolean boo = true;
if (url.indexOf("#") != -1)
{
System.out.println("Non-page...discarding page.");
return null;
}
for(x=0; x<500; x++)
if(url.equals(array[x]))
{
return null;
}
array[i] = url;
i++;
System.out.println(array[1]);
System.out.println(array[2]);
System.out.println(array[3]);
System.out.println(array[4]);
System.out.println(array[5]);
System.out.println(array[6]);
System.out.println(array[7]);
System.out.println(array[8]);
System.out.println(array[9]);
return array;
}
这是因为您使用的是for循环,在循环中,您获得了新数据,并丢弃了从循环的上一次迭代中获得的所有数据,因此大部分数据都被丢弃和浪费 考虑创建一个2D数组,或者更好的创建一个List,List的列表,这样您就可以在for循环中保存返回的所有结果 i、 e 然后呢,
List<List<String>> parsedInfo = new ArrayList<List<String>>();
while (stillHavePages) {
// parse pages and add to list above
}
循环之后,parray将是最后一次调用parseURLurl,page;,的结果;,如果该值为null,那么最终将得到null.forx=0;这似乎更适合500,这是我选择的一个疯狂的上限。正如我在下面所说的,大多数代码只是检查它是否为空。最终将全部删除。您至少可以使用array.length而不是500。或者只使用array而不是parray并忽略parseURLs返回值,该返回值将是array或null。这是一个非常奇怪的代码。但是它不应该在for循环中保持不变吗?至少一次迭代?我认为帕雷应该对一整组有效。也许不是。我会重做的。是的,这是一个非常奇怪的代码。一个很好的方法就是检查是否有空的东西,这就是为什么它很混乱的原因。@user3010468:我不知道。我只知道你在for循环中使用了幻数,这个循环不应该有幻数。只要对他们说“不”。@user3010468如果URL已经在数组中或不包含字符串,则从parseURL返回null。在这种情况下,无论数组中有什么,您的阵列最终都会被设置为null。你把自己弄糊涂了,因为你有硬编码的数字,奇怪的本地和外地的混合,以及不必要的重新分配。
List<List<String>> parsedInfo = new ArrayList<List<String>>();
while (stillHavePages) {
// parse pages and add to list above
}