java.lang.ArrayIndexOutOfBoundsException:4
java.lang.ArrayIndexOutOfBoundsException: 4
我正在努力将制表符分隔的文本文件中的值提取到 groovy 中的列表中。但是我运行变成了ArrayIndexOutOfBoundsException
。
代码
println("Reading File Contents")
def fullArray = new String[31721][4]
def availableArray = new String[1386][2]
def filteredFullArray = new String[1386][5]
String fileContents = new File('beliefs.txt').text
String availableContents = new File('available.txt').text
def count = 0
fileContents.eachLine { line ->
String[] str
str = line.split('\t')
def subCount = 0
for (subCount; subCount < str.length; subCount++) {
fullArray[count][subCount] = str[subCount]
}
count++
}
beliefs.txt
1 Azerbaijan hasOfficialLanguage Azerbaijani_language
2 Augustus hasChild Julia_the_Elder
3 Arthur_Aikin isCitizenOf England
4 Arthur_Aikin diedIn London
5 Alexander_III_of_Russia isMarriedTo Maria_Feodorovna__Dagmar_of_Denmark_
6 Alexander_III_of_Russia hasChild Nicholas_II_of_Russia
7 Alexander_III_of_Russia hasChild Grand_Duke_Michael_Alexandrovich_of_Russia
8 Alexander_III_of_Russia hasChild Grand_Duchess_Olga_Alexandrovna_of_Russia
9 Alexander_III_of_Russia hasChild Grand_Duke_Alexander_Alexandrovich_of_Russia
10 Alexander_III_of_Russia hasChild Grand_Duke_George_Alexandrovich_of_Russia
...
...
...
31719 Minqi_Li isKnownFor Chinese_New_Left
31720 Henry_Bates_Grubb isKnownFor Mount_Hope_Estate
31721 Thomas_Kuhn isKnownFor Paradigm_shift
运行 这给了我以下错误。
Caught: java.lang.ArrayIndexOutOfBoundsException: 4
java.lang.ArrayIndexOutOfBoundsException: 4
at extractBeliefs$_run_closure1.doCall(extractBeliefs.groovy:19)
at extractBeliefs.run(extractBeliefs.groovy:12)
我知道出现上述错误的原因。但是由于我的数组没有超过最后一个索引,并且错误显示在 fileContents.eachLine { line ->
行,我无法找到哪里出错了。
如有任何建议,我们将不胜感激。
尝试使用 space
拆分
str = line.split('\s+')
而不是
str = line.split('\t')
更好的方法是先将所有 Multispace 或制表符替换为单个 space,然后再按单个 space.
拆分
line = line.replace("\s+/g", " ")
str = line.split('\s+')
您的初始错误来自这一行 (19):
fullArray[count][subCount] = str[subCount]
第 12 行只是在退出闭包时提升异常。这绝对表明您在一行上有一个额外的选项卡...出于调试目的,请尝试将该行打印到控制台,然后再尝试将其加载到数组中。这将帮助您确定哪一行有错误。
我正在努力将制表符分隔的文本文件中的值提取到 groovy 中的列表中。但是我运行变成了ArrayIndexOutOfBoundsException
。
代码
println("Reading File Contents")
def fullArray = new String[31721][4]
def availableArray = new String[1386][2]
def filteredFullArray = new String[1386][5]
String fileContents = new File('beliefs.txt').text
String availableContents = new File('available.txt').text
def count = 0
fileContents.eachLine { line ->
String[] str
str = line.split('\t')
def subCount = 0
for (subCount; subCount < str.length; subCount++) {
fullArray[count][subCount] = str[subCount]
}
count++
}
beliefs.txt
1 Azerbaijan hasOfficialLanguage Azerbaijani_language
2 Augustus hasChild Julia_the_Elder
3 Arthur_Aikin isCitizenOf England
4 Arthur_Aikin diedIn London
5 Alexander_III_of_Russia isMarriedTo Maria_Feodorovna__Dagmar_of_Denmark_
6 Alexander_III_of_Russia hasChild Nicholas_II_of_Russia
7 Alexander_III_of_Russia hasChild Grand_Duke_Michael_Alexandrovich_of_Russia
8 Alexander_III_of_Russia hasChild Grand_Duchess_Olga_Alexandrovna_of_Russia
9 Alexander_III_of_Russia hasChild Grand_Duke_Alexander_Alexandrovich_of_Russia
10 Alexander_III_of_Russia hasChild Grand_Duke_George_Alexandrovich_of_Russia
...
...
...
31719 Minqi_Li isKnownFor Chinese_New_Left
31720 Henry_Bates_Grubb isKnownFor Mount_Hope_Estate
31721 Thomas_Kuhn isKnownFor Paradigm_shift
运行 这给了我以下错误。
Caught: java.lang.ArrayIndexOutOfBoundsException: 4 java.lang.ArrayIndexOutOfBoundsException: 4 at extractBeliefs$_run_closure1.doCall(extractBeliefs.groovy:19) at extractBeliefs.run(extractBeliefs.groovy:12)
我知道出现上述错误的原因。但是由于我的数组没有超过最后一个索引,并且错误显示在 fileContents.eachLine { line ->
行,我无法找到哪里出错了。
如有任何建议,我们将不胜感激。
尝试使用 space
拆分str = line.split('\s+')
而不是
str = line.split('\t')
更好的方法是先将所有 Multispace 或制表符替换为单个 space,然后再按单个 space.
拆分line = line.replace("\s+/g", " ")
str = line.split('\s+')
您的初始错误来自这一行 (19):
fullArray[count][subCount] = str[subCount]
第 12 行只是在退出闭包时提升异常。这绝对表明您在一行上有一个额外的选项卡...出于调试目的,请尝试将该行打印到控制台,然后再尝试将其加载到数组中。这将帮助您确定哪一行有错误。