我今天遇到了一些大脑问题,并试图与在家里跑来跑去的小孩进行编码并没有帮助。我觉得这是显而易见的事情,我应该在5分钟内完成它,但它已经过了一个小时,而我却没有得到它。我会休息一下然后回来看看它,但我希望有时候有人可以指出我失踪的明显事实。
我在一个类中有一个返回String数组的方法。我希望将返回的数组分配给接受返回的另一个类的方法中的String数组,但它似乎不起作用。
以下是示例代码:
String[] meta = Scrapper.scrape(movie);
for(String i: meta)
{
if (i == null)
{
continue;
}
JOptionPane.showMessageDialog(null, i);
}
String数组中的值是来自电影的元数据(发行年份,描述,标题等)没什么长或花哨的,上面显示的for循环在scrape方法中工作正常,以显示所在的数据返回的String数组,但是当我尝试在调用方法中检查返回数组中的数据时它没有做任何事情(假设因为返回后数据为null,并进一步假设我在分配时做错了返回的数组到新数组。)
有人帮助我的大脑今天开始。谢谢!
更新 - 添加Scrapper类示例:
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.*;
import org.openqa.selenium.Cookie;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;
import javax.swing.JOptionPane;
import java.util.Scanner;
import java.io.IOException;
import java.nio.charset.Charset;
import java.nio.charset.StandardCharsets;
import java.nio.file.Path;
import java.nio.file.Paths;
public class Scrapper {
public static String[] scrape(String movieTitle)
{
String[] results = new String[20];
results[0] = movieTitle;
movieTitle.replace(" ", "+");
// example: http://www.omdbapi.com/?i=&t=Short+Circuit
String queryURL = "http://www.omdbapi.com/?i=&t=" + movieTitle;
WebDriver driver = new ChromeDriver();
driver.get(queryURL);
String page = driver.getPageSource();
Scanner scanner = new Scanner(page);
results[0] = page.substring(page.indexOf("Title") + 8, page.indexOf("\"", page.indexOf("Title") + 9)); // Title
results[1] = page.substring(page.indexOf("Year") + 7, page.indexOf("Year") + 11); // Year released
results[2] = page.substring(page.indexOf("Rated") + 8, page.indexOf("\"", page.indexOf("Rated") + 9)); // Rating
results[3] = page.substring(page.indexOf("Released") + 11, page.indexOf("\"", page.indexOf("Released") + 12)); // Release Date
results[4] = page.substring(page.indexOf("Runtime") + 10, page.indexOf("\"", page.indexOf("Runtime") + 11)); // Running Time
results[5] = page.substring(page.indexOf("Genre") + 8, page.indexOf("\"", page.indexOf("Genre") + 9)); // Genre
results[6] = page.substring(page.indexOf("Director") + 11, page.indexOf("\"", page.indexOf("Director") + 12)); // Director(s)
results[7] = page.substring(page.indexOf("Writer") + 9, page.indexOf("\"", page.indexOf("Writer") + 10)); // Writer(s)
results[8] = page.substring(page.indexOf("Actors") + 9, page.indexOf("\"", page.indexOf("Actors") + 10)); // Starring
results[9] = page.substring(page.indexOf("Plot") + 7, page.indexOf("\"", page.indexOf("Plot") + 8)); // Starring
results[10] = page.substring(page.indexOf("Poster") + 9, page.indexOf("\"", page.indexOf("Poster") + 10)); // Plot
scanner.close();
driver.close();
return results;
}
}
我之前已经验证过返回的结果不是null或为空,而是使用与调用方法验证数据时相同的for循环。 for循环基本上只是为了理智检查我并确保我没有遗漏明显的东西(比如从错误的索引或其他东西解析)并且正确的数据按照我的预期返回。
答案 0 :(得分:0)
我想知道它是否与您使用静态参考的事实有关?说实话,我看不出一个真正的原因,为什么这样做不会对你有所帮助。编辑:我只是尝试了几种不同的方法,使用静态和非静态方法两个类,没有问题。也许你可以从接收返回数组的调用类中显示更多代码。
答案 1 :(得分:0)
不确定这是否会导致您的网址查询出现问题,但您未正确使用.replace()
。您当前正在尝试使用它来修改不可变的String。请记住.replace()
不会修改字符串,但会return
新修改的字符串。所以不要这样:
movieTitle.replace(" ", "+"); <---
String queryURL = "http://www.omdbapi.com/?i=&t=" + movieTitle;
尝试使用此
movieTitle = movieTitle.replace(" ", "+");
此外,我不确定您使用扫描仪的是什么,但实际上并非使用。
答案 2 :(得分:0)
答案可以追溯到我的大脑没有被打开。我在代码中设置了“电影标题”的默认值以进行测试。但是,我在设置GUI中输入的变量之前设置了它(默认为“Movie Title”)。所以我设置它,GUI重置它,由于某种原因我查询的网站无法在其数据库中找到“电影标题”作为有效的电影标题。
基本上,我忙于分心和愚蠢,并且没有看到我面前的一切是正确的。
谢谢大家试图解决我的愚蠢问题。