我正在尝试创建一个JSONObject
,但我得到了一些奇怪的结果。
我正在使用此for
循环
Object[] q = null;
Deque<String> queue = new ArrayDeque<String>();
if(queue.size() > 7){
queue.remove();
}
queue.add(aux);
q = queue.toArray();
for(int i = 0; i < q.length; i++){
String[] temp = q[i].toString().split(",");
logger.info(temp[2]);
JSONObject json = new JSONObject();
json.put("stamp", temp[0]);
json.put("zone", temp[1]);
json.put("name", temp[2]);
json.put("val", temp[3]);
jArray2.put(json);
}
但我在服务器日志中收到此错误:
java.lang.ArrayIndexOutOfBoundsException: 2
at publicwebsite.util.PieChartData.getCSV(PieChartData.java:114)
正如您所看到的,我正在记录错误所在的temp[2]
的结果。然而,在应用程序日志中,temp[2]
已成功记录:
2015-10-28 18:55:37,031 [ajp-0.0.0.0-8009-2] INFO publicwebsite.util.PieChartData - "apples"
2015-10-28 18:55:37,033 [ajp-0.0.0.0-8009-2] INFO publicwebsite.util.PieChartData - "oranges"
2015-10-28 18:55:37,033 [ajp-0.0.0.0-8009-2] INFO publicwebsite.util.PieChartData - "pears"
2015-10-28 18:55:37,033 [ajp-0.0.0.0-8009-2] INFO publicwebsite.util.PieChartData - "pineapples"
2015-10-28 18:55:37,033 [ajp-0.0.0.0-8009-2] INFO publicwebsite.util.PieChartData - "strawberries"
2015-10-28 18:55:37,033 [ajp-0.0.0.0-8009-2] INFO publicwebsite.util.PieChartData - "plumbs"
2015-10-28 18:55:37,033 [ajp-0.0.0.0-8009-2] INFO publicwebsite.util.PieChartData - "berries"
输出 logger.info(Arrays.toString(q));
[2015-09-07 04:00:00,EDT,"apples",9707, 2015-09-07 04:00:00,EDT,"oranges",1799, 2015-09-07 04:00:00,EDT,"pears",1961, 2015-09-07 04:00:00,EDT,"pineapples",4669, 2015-09-07 04:00:00,EDT,"strawberries",245, 2015-09-07 04:00:00,EDT,"plumbs",367, 2015-09-07 04:00:00,EDT,"berries",550
当日志显示有明显的东西时,怎么会有一个数组越界错误?
答案 0 :(得分:0)
您正在检查temp[2]
但稍后访问
json.put("val", temp[3]);
更好:
if ( temp.length > 3 )
json.put("val", temp[3]);
<强>底线强>
对来自程序外部并使用文字静态索引的数据使用.split()
时,需要先检查长度,静音假设长度始终等于最高索引总是会导致此类错误
答案 1 :(得分:0)
应用程序服务器中可能有另一个类实例正在写入日志或另一个JVM正在运行。 其他东西写入日志似乎。