1

我正在制作一个应用程序,通过每种颜色的最有价值的宝石来组织魔兽世界珠宝制作拍卖数据。为此,我试图将一个 json 数据库解析为一个数组——我知道让我们像 gson api 这样的东西来做这件事很简单,但因为这是一个入门级 java 类的项目,我的教授已经说过我应该使用我们在课堂上学到的东西来导入数据,据说我有以下代码来解析 json 数据并将其打印在屏幕上(仍在解析到数组)我已经上传了我的 data.json到这里并包含我到目前为止的代码:

import java.io.File;
import java.io.FileNotFoundException;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

public class jcFormat {

public static void main(String[] args) {
    try {
        File f = new File("c:\\ProgramData\\jcUtil\\data.json");
        Scanner sc = new Scanner(f);

        List<Auction> ahdata = new ArrayList<Auction>();
        sc.nextLine();//eats line
        sc.nextLine();//eats line
        sc.nextLine();//eats line
        while (sc.hasNextLine()) {
            String line = sc.nextLine();
            String[] details = line.split(",");
            //get item as string
            String itemz = details[1];
            itemz = itemz.substring(7, itemz.length());
            //convert itemz string to item int
            int item = Integer.parseInt(itemz);
            //get buyout as string
            String buyoutz = details[4];
            buyoutz = buyoutz.substring(9, buyoutz.length());
            //convert buyoutz string to buyout int
            int buyout = Integer.parseInt(buyoutz);
            //get quantity as string
            String quantityz = details[5];
            quantityz = quantityz.substring(11, quantityz.length());
            //convert quantityz string to quantity int
            int quantity = Integer.parseInt(quantityz);

            Auction a = new Auction(item, buyout, quantity);
            ahdata.add(a);
        }

        for (Auction a : ahdata) {
            System.out.println(a.toString());
        }

    } catch (FileNotFoundException e) {
        e.printStackTrace();
    }
}
}

class Auction {

private int item;
private int buyout;
private int quantity;

public Auction(int item, int buyout, int quantity) {
    this.item = item;
    this.buyout = buyout;
    this.quantity = quantity;
}

/**
 * @return the item
 */
public int getItem() {
    return item;
}

/**
 * @param item the item to set
 */
public void setItem(int item) {
    this.item = item;
}

/**
 * @param buyout the buyout to set
 */
public void setBuyout(int buyout) {
    this.buyout = buyout;
}

/**
 * @return the buyout
 */
public int getBuyout() {
    return buyout;
}

/**
 * @return the quantity
 */
public int getQuantity() {
    return quantity;
}

/**
 * @param quantity the quantity to set
 */
public void setQuantity(int quantity) {
    this.quantity = quantity;
}

@Override
public String toString() {
    return this.item + "\t" + this.buyout + "\t" + this.quantity;
}
}

我目前遇到的问题是这个错误:

线程“主”java.lang.StringIndexOutOfBoundsException 中的异常:字符串索引超出范围:-9 at java.lang.String.substring(String.java:1958) at jcutil.jcFormat.main(jcFormat.java:40) Java 结果: 1

如果我在 data.json 的前 10 行测试我的代码,它工作得很好,所以我试图找出哪些行导致问题,作为一个 java 新手,我的调试技能不是很好所以任何帮助弄清楚为什么我会收到这个错误将不胜感激。

4

1 回答 1

0

假设您正在使用 eclipse 在行上放置一个断点

buyoutz = buyoutz.substring(9, buyoutz.length());

并在调试模式下运行应用程序,这将允许您查看问题所在。

于 2012-12-03T00:32:58.460 回答