【问题标题】:Assign a returned String array to a new String array - Java将返回的字符串数组分配给新的字符串数组 - Java
【发布时间】:2014-01-16 18:12:39
【问题描述】:

我今天有一些大脑问题,试图让一个蹒跚学步的孩子在家里跑来跑去编写代码并没有帮助。我觉得这是很明显的事情,我应该在 5 分钟内完成,但已经过了一个小时,我不明白。我要休息一下,然后再回来看看,但我希望同时有人能指出我明显遗漏的地方。

我在一个类中有一个方法,它返回一个字符串数组。我希望将返回的数组分配给另一个接受返回的类的方法中的字符串数组,但它似乎不起作用。

示例代码如下:

String[] meta = Scraper.scrape(movie);
    
            
    for(String i: meta) 
    {
        if (i == null)
            {
                continue;
            }
        JOptionPane.showMessageDialog(null, i);

    }

String 数组中的值是来自电影的元数据(发行年份、描述、标题等)。没什么长的或花哨的,上面显示的 for 循环在 scrape 方法中可以正常工作,以显示其中的数据返回的字符串数组,但是当我尝试在调用方法中检查返回的数组中的数据时它什么也没做(假设因为返回后数据为空,并进一步假设我在分配返回的数组到新数组)。

今天有人帮助我的大脑启动。谢谢!

更新 - 添加 Scraper 类示例:

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 Scraper {

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;
    
    
}

}

我之前已经使用我现在在调用方法来验证数据时使用的相同 for 循环验证了返回的结果不为 null 或空。 for 循环基本上只是为了检查我并确保我没有遗漏一些明显的东西(比如从错误的索引中解析或其他东西),并且按照我的预期返回正确的数据。

【问题讨论】:

  • 关于问题,您返回String[] 的方法是返回预期结果还是返回null?
  • 您是返回一个字符串还是希望填充传递给函数的字符串?
  • 什么是“不工作”?
  • 如果是null,你会得到 NPE。请告诉我们Scrapper#scrape 好吗?
  • 这对我来说很好。所以你说scrape 方法返回后meta 数组的值为null?如果是这样,您是否要发布您的 scrape 方法。

标签: java arrays string return assign


【解决方案1】:

不确定这是否会导致您的 URL 查询出现问题,但您没有正确使用 .replace()。您目前正在尝试使用它来修改不可变字符串。记住.replace() 不会修改字符串,但它会return 一个新的修改后的字符串。所以不要这样:

movieTitle.replace(" ", "+");       <---
String queryURL = "http://www.omdbapi.com/?i=&t=" + movieTitle;

尝试使用它

movieTitle = movieTitle.replace(" ", "+");

另外,我不确定您使用扫描仪的目的是什么,但您实际上并没有使用它。

【讨论】:

  • 太棒了。我没有意识到,因为网站实际上并不关心它是否得到“”或“+”,它对待它们是一样的。未使用扫描仪。它只是我之前尝试过但尚未清理的东西留下的残骸。谢谢!
【解决方案2】:

我想知道这是否与您使用静态引用有关?老实说,我看不出一个真正的原因,为什么这不会像你拥有的那样工作。编辑:我只是尝试了几种不同的方法来使用静态和非静态方法对两个类执行此操作,并且没有任何问题。也许您可以从接收返回数组的调用类中显示更多代码。

【讨论】:

    【解决方案3】:

    答案回到我的大脑没有打开。我在测试代码中设置了“电影标题”的默认值。但是,我在设置在 GUI 中输入的变量之前设置它(默认为“电影标题”)。所以我设置了它,GUI 重置了它,由于某种原因,我查询的网站无法在他们的数据库中找到“电影标题”作为有效的电影标题。

    基本上,我忙于分心和愚蠢,一直看不到我面前的东西。

    感谢大家试图解决我的愚蠢问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-07
      • 2010-10-09
      • 2012-02-19
      • 2019-10-13
      • 1970-01-01
      相关资源
      最近更新 更多