我正在从文件中读取并在文件中的一行上读取: " {A,B,C,d}"我在该行上运行了一个split函数,它返回一个10的字符串数组(不知道为什么是10而不是9)元素。每个元素都是一个字符长。然后我对该数组进行了一个foreach循环,并在该循环的主体内,我正在检查是否" char"是一个letterOrDigit,如果它是..做其他事情。但是在该循环的第一次迭代中,我得到一个StringIndexOutOfBounds异常,并且在我的生命中我不知道为什么。使用intelliJ时我没遇到这个问题。这是在日食中运行,它让我疯了。请帮忙。
# config/environments/production.rb
...
config.log_tags = [ :uuid,:remote_ip ]
...
# log/production.log
[4d23e817-eca8-4db1-ba5b-7456d3af7f65] [127.0.0.1] Started GET "/resources/id" for 127.0.0.1 at 2015-11-26 21:09:11 +0900
This is a screenshot of what the String array looks like after the split
This is what the line looks like after the file has been read.
答案 0 :(得分:4)
数组中的第一个字符串是一个空字符串:“”。它的长度为0,因此str.charAt(0)超出范围。
答案 1 :(得分:4)
我认为你不需要使用spilled函数,你想通过char读取整个char char,就像数组访问一样。 字符串拆分函数的空值产生额外的元素,因为溢出函数对于这种情况没有特殊的案例处理,尽管它在拆分字符串的长度为1时正确处理了案例
您可以在下面重写代码
for (int line = 1; line < file.size(); line++) // start at line 1 cause the line with the alphabet is useless.
{
if (line == 1) // Line 1 is always the states... so create the states.
{
String lineValue = file.get(line);
int len = lineValue.length();
for (int index = 0; index < len; index++) {
if (Character.isLetterOrDigit(lineValue.charAt(index))) {
//dfa.addState(new State(str.charAt(0)));
}
}
}
}
答案 2 :(得分:0)
从截图中,索引0长度的数组元素为0,即它是一个空字符串,但在迭代期间,您尝试访问空字符串的第一个字符,因此它会抛出IndexOutOfBoundException
。
为了避免这种情况,请先检查length
或isEmpty
,然后再访问char