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]);