World of Warcraft ジュエル クラフティング オークション データを各色の最も価値のあるジェムで整理するアプリケーションを作成しています。これを行うために、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 の初心者として、私のデバッグ スキルはあまり良くありません。なぜこのエラーが発生するのかを理解する助けがあれば大歓迎です。