Java ArrayIndexOutOfBounds,但正在记录项
我试图创建一个Java ArrayIndexOutOfBounds,但正在记录项,java,arrays,json,Java,Arrays,Json,我试图创建一个JSONObject,但得到了一些奇怪的结果 我将此用于循环 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[]
JSONObject
,但得到了一些奇怪的结果
我将此用于循环
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);
}
如您所见,我正在记录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))的输出代码>
当日志显示明显存在某些内容时,怎么会出现数组越界错误?您正在检查temp[2]
,但几行之后您就可以访问了
json.put("val", temp[3]);
更好:
if ( temp.length > 3 )
json.put("val", temp[3]);
底线
当对来自程序外部的数据使用.split()
并使用文本静态索引时,需要先检查长度,默认假设长度始终等于最高索引总是会导致此类错误。应用程序服务器中可能有另一个类实例正在写入日志或另一个JVM正在运行。
似乎还有其他东西写入日志。行logger.info(temp[2])如果数组长度小于3
,则code>将抛出ArrayIndexOutOfBoundsException
,因此这些日志必须来自较小的i
值。尝试记录数组。改为记录字符串(temp)
。但是导致异常的索引是2
,而不是3
。这是一个示例-您可以使用0到0之间的任何索引来执行此操作∞不需要大写字母。但是如果你想避免在temp[3]
上出现异常,你需要检查temp.length>3
无论如何。我已经做了temp[1]
,但是仍然在索引:1
上得到相同的错误,你的字符串数组temp
要么是空的,要么只有一个元素。检查之前的代码,我觉得很奇怪:aux
从哪里来,里面有什么?
json.put("val", temp[3]);
if ( temp.length > 3 )
json.put("val", temp[3]);