1
我想将这个.txt文件转换为SQL查询,我可以读入SQLite数据库,问题是我无法在需要时打印出我需要的信息。解析文本文件
该代码的问题在于,它将在到达prob属性时打印出来,然后在到达min/max属性时再次打印同一行,只是这次使用文件中找到的正确值。
只有1项与此ID,但它打印两次:
0908100 ItemID: 2060000 Prob: 0.108 Min: 1 Max: 1
0908100 ItemID: 2060000 Prob: 0.108 Min: 10 Max: 20
整个文件的结构正确因此应始终遵循相同的模式,所以当它达到“概率”我一直在努力寻找一种方法来检查下一个值是最小/最大值,如果它不打印,否则打印后读取最小/最大值,我一直无法。
我从节目想会是这样的,当它找到一个最小/最大属性的输出:
INSERT INTO `test`.`drops` (mobID, itemID, prob, min, max);
VALUES (0908100, 2060000, 0.108, 10, 20);
如果没有最小值/最大值后概率,然后在同一行应该是这样的,而不是:
INSERT INTO `test`.`drops` (mobID, itemID, prob, min, max)
VALUES (0908100, 2060000, 0.108, 1, 1);
钱总是itemID 0,最小/最大值默认为货币值。 so:
INSERT INTO `test`.`drops` (mobID, itemID, prob, min, max)
VALUES (0908100, 0, 0.65, 87, 87);
。
public static void main(String[] args) throws FileNotFoundException {
int radNmr = 0;
String mobID = "";
String money = "";
String item = "";
String prob = "";
String min = "1";
String max = "1";
Scanner sc = new Scanner(new File("Monster_Drops1.txt"));
while (sc.hasNext()) {
String namn = sc.next();
String namn1 = sc.next();
if ("m".equals(namn.substring(0, 1)) && !"money".equals(namn) && !"max".equals(namn) && !"min".equals(namn)) {
mobID = namn.substring(1);
}
switch(namn) {
case "money":
money = namn1;
break;
case "item":
item = namn1;
break;
case "prob":
if (!money.equals("")) {
money = "";
break;
} else if (money.equals("")){
prob = namn1;
System.out.println(mobID + " ItemID: " + item + " Prob " + prob + " Min: " + min + " Max: " + max);
break;
}
case "max":
if (min.equals("1")) {
max = namn1;
break;
} else if (!min.equals("1")) {
max = namn1;
System.out.println(mobID + " ItemID: " + item + " Prob " + prob + " Min: " + min + " Max: " + max);
max = "1";
min = "1";
break;
}
case "min":
if (max.equals("1")) {
min = namn1;
break;
} else if (!max.equals("1")) {
min = namn1;
System.out.println(mobID + " ItemID: " + item + " Prob " + prob + " Min: " + min + " Max: " + max);
break;
}
}
}
}
的Monster_Drops1.txt进来这种格式,在开始/结束标记后的怪物ID没有意义,我只是添加它,因为扫描仪在我抛出错误时,该行只有一个值。
m0908100 Start
money 87
prob 0.65
item 2340802
prob 0.4
item 2640002
prob 0.1
item 2040002
prob 0.00003
item 2041001
prob 0.00003
item 2060000
prob 0.54
min 10
max 20
item 9010000
prob 0.98
m0740101 end
money 80
prob 0.55
item 6050000
prob 0.9
item 2041006
prob 0.00003
item 3014000
prob 0.41
你有一堆'if'和'else if'语句。我怀疑这是你的问题。 –
欢迎来到Stack Overflow!它看起来像你需要学习使用调试器。请帮助你一些补充性的调试技术。如果您之后仍然遇到问题,请随时返回一个显示您的问题的[最小化,完整和可验证示例](http://stackoverflow.com/help/mcve)。 –
我绝对推荐你像以前的评论所建议的那样研究一下调试器。 与此同时,看起来第一个打印语句是在此条件之后打印的:'else if(namn.equals(“prob”)&& money.equals(“”))'。在此条件之后打印第二个打印语句:'else if(namn.equals(“max”)&&!min.equals(“1”))'。 –