- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
堆栈跟踪很长,但这是相关部分。
Caused by: java.lang.ArrayIndexOutOfBoundsException: 33
at java.lang.String.equals(String.java:1018)
at java.util.HashMap.get(HashMap.java:305)
所以,当我从 HashMap<String,?>
检索一个元素时, String#equaqls 被调用。然后,从行 if (v1[i++] != v2[j++])
抛出 ArrayIndexOutOfBoundException
// Sun java 1.6
public boolean equals(Object anObject) {
if (this == anObject) {
return true;
}
if (anObject instanceof String) {
String anotherString = (String)anObject;
int n = count;
if (n == anotherString.count) {
char v1[] = value;
char v2[] = anotherString.value;
int i = offset;
int j = anotherString.offset;
while (n-- != 0) {
if (v1[i++] != v2[j++])
return false;
}
return true;
}
}
return false;
}
确实很奇怪。
<小时/>更新。异常(exception)是从日志分析程序中获取的。我在那里没有使用反射。我还考虑过某些东西损坏了字符串对象,但没有从代码中得到任何线索。并且重启后没有再出现这个问题。我不知道如果我不断重试它是否会重现。
LogUtils
public static Map<String, String> parseLine(String line) {
if (StringUtils.isEmpty(line)) {
return Collections.emptyMap();
}
String[] parts = StringUtils.split(line, '\t');
Map<String, String> results = new HashMap<String, String>();
for (String part : parts) {
String[] keyVal = StringUtils.split(part, "=", 2);
if (keyVal.length == 2) {
String key = keyVal[0];
String value = keyVal[1];
results.put(key, value);
}
}
return results;
}
public static void process(String fileName, Date date, Closure closure) throws IOException {
InputStream is = null;
Reader r = null;
try {
is = new FileInputStream(getFilename(fileName, date));
is = new BufferedInputStream(is);
is = new GZIPInputStream(is);
r = new InputStreamReader(is, "utf8");
LineIterator iter = IOUtils.lineIterator(r);
while (iter.hasNext()) {
String line = iter.nextLine();
Map<String, String> map = LogUtils.parseLine(line);
closure.execute(map);
}
} finally {
IOUtils.closeQuietly(r);
IOUtils.closeQuietly(is);
}
}
关闭
public void execute(Map<String, String> line) {
if (dataMap == null) {
dataMap = new HashMap<String, Map<Long, Integer>>();
}
String identifier = line.get(Constants.IDENTIFIER_KEY); // Exception thrown from there
/* ...blahblah... */
}
为了简单起见,我将创建一个闭包对象并调用 LogUtils.process
用它。 LogUtils 将行(例如: key1=value1\tkey2=value2\t...kn=valuen
)换成 HashMap
。然后LogUtils
将把 map 传递给闭包。并且异常是从 line.get(Constants.IDENTIFIER_KEY);
抛出的。当 Constants.IDENTIFIER_KEY 是静态最终字段时。所以equals方法的lhs和rhs是一个静态的final String,返回值是StringUtils.split(line, '\t')
。我检查了commons-lang的代码。这是String#substring
实际上。所以它仍然很奇怪。
最佳答案
这基本上表明某些东西正在破坏字符串对象。复制起来很容易:
import java.lang.reflect.*;
public class Test {
public static void main(String[] args) throws Exception {
String x = "hello";
String y = new String("xhell");
Field field = String.class.getDeclaredField("offset");
field.setAccessible(true);
field.set(y, 1);
System.out.println(x.equals(y));
}
}
...但我们不知道这是否实际上是在您的情况下字符串被损坏的方式。
关于java - String#equals 抛出 ArrayIndexOutOfBoundException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12242688/
我正在尝试模拟终端/文件系统。现在我正在解析和标记命令。 我正在尝试确定什么被视为有效命令。我的策略是检查输入数组中的索引 2 元素是否是字符串“empty”以外的任何内容。如果是,我的 checkV
这是我计算 n 的斐波那契数的代码。当 n = 0、ArrayIndexOutOfBoundException 引发时,我不明白。从 fib 函数中,当 n = 0 时,它应该返回 0。这是什么原因造
我创建了一个像这样的堆栈类。有时它会运行,有时会通过 ArrayIndexOutofBoundException 运行。线程中有什么问题?不太明白,请帮忙。 public class StackImp
如果我正在数组中查找某个值(针),并且该值不存在于该数组中,我将收到 java.lang.ArrayIndexOutOfBoundsException。 (见下面的代码)如果该值存在于数组中,它就可以
我编写了一个简单的代码来理解手动传递值,这是我的代码 public class coba{ public static void main (String[] args){ i
我的任务是编写一个函数来重新排列数组,以便奇数从大到小出现在数组的开头,偶数从最小到最大出现在数组的末尾。除了标准输入和输出流之外,我们不允许使用任何其他库。 当数字为:时输出有效: {-15, 45
只要位置到达某个点,此代码就会不断抛出 ArrayOutBoundsException 40。有时程序运行良好。 //method to get player movement around the
我目前正在使用 hsqldb。我的创建语句如下所示: CREATE TABLE Movie ( movieId INTEGER GENERATED BY DEFAULT AS IDENTITY
我得到了这个奇怪的异常,我真的不明白为什么..我尝试调试并发现它在运行时出错了: opt[i][j] = Double.POSITIVE_INFINITY; 并且当 i == 0 和 j == 1 时
输入是 1000:rohit:male:dev:2500 在此我想数一数男性和女性的数量。当我使用 split 时,将每个性别字段分配给 reducer 显示 ArrayIndexOutOfBounf
如果我们创建一个如下所示的虚拟 ArrayList 并使用 -1 和 1 作为参数调用 get 方法。然后我们得到以下输出: 对于测试用例 1:它抛出 ArrayIndexOutOfBoundExce
在我的回历应用程序中,如果我单击下个月按钮并到达年底(即最后一个月),或者如果我单击上个月按钮直到到达年初(即第一个月),应用程序崩溃并抛出 java.lang.ArrayIndexOutOfBoun
这里的异常是 IndexOutOfBoundsException: public static void main(String[] args) { List elements = new A
我正在尝试构建一个应用程序,如果用户单击一个按钮,它将显示一个带有 multiChoiceItems 的警告对话框, 我从 ArrayList(已转换为数组字符串)中为 multiChoiceItem
public class ReadToHashmap { public static void main(String[] args) throws Exception { Map map =
我一直在研究Magic Square的形成,在阅读了算法之后,我发现在形成MagicSquare时需要遵循一定的规则。 我遵循的算法是: The magic constant will always
堆栈跟踪很长,但这是相关部分。 Caused by: java.lang.ArrayIndexOutOfBoundsException: 33 at java.lang.String.equals
我是java开发领域的初学者,但我仍然是Java编程的学习者。我想在 netbeans IDE 上查看支持 vector 机分类器的输出。因此,我复制了这段附加的代码,并尝试使用所有其他必需的类和主方
这个问题已经有答案了: What causes a java.lang.ArrayIndexOutOfBoundsException and how do I prevent it? (25 个回答)
我正在做一个 TicTacToe 程序,现在我正在使用菜单来更改棋盘的大小(从 3x3 到 9x9 的任意位置),我需要在添加新按钮之前删除当前使用的按钮。在循环尝试删除它们时,我收到此错误: Exc
我是一名优秀的程序员,十分优秀!