java.lang.ArrayIndexOutOfBoundsException?
java.lang.ArrayIndexOutOfBoundsException?
我正在制作一个 android 应用程序,我想知道为什么我的代码中收到 java.lang.ArrayIndexOutOfBoundsException
:
InputStreamReader inputStreamReader;
try {
inputStreamReader = new InputStreamReader(getAssets().open("myFile.csv"));
Scanner inputStream = new Scanner(inputStreamReader);
inputStream.next(); // Ignores the first line
while (inputStream.hasNext()) {
String data = inputStream.nextLine();
String[] line = data.split(",");
entryArray.add(line[1]);
}
代码读取 CSV 文件,然后将文件中第二列的内容添加到全局 ArrayList<String>
(entryArray)。错误具体指向:
entryArray.add(line[1]);
但我不确定为什么。另外,当我将其更改为:
时也没有错误
entryArray.add(line[0]);
我正在阅读的 CSV 文件看起来有点像这样:
Name,Type,Description
programming,noun,the process of writing computer programs
也许您正在阅读一个空行,或者一个不包含 , 字符的行。在那种情况下,拆分数组只包含一个元素。
考虑只检查拆分数组是否足够大,如果不够大则跳过该行。
您可以尝试将倒数第二行更改为类似以下内容:
if (entryArray.size() > 1)
entryArray.add(line[1]);
或
if (entryArray.size() > 1)
entryArray.add(line[1]);
else
entryArray.add(line[0]);
感谢您的所有回答,但我找到了解决方案:
在我的代码中,我添加了一条日志消息来测试每个行数组中的元素数量,如下所示:
Log.d("This line length", "" + line.length);
而且我发现第一行只包含 1 个元素,而不是我预期的 3 个。
我发现问题出在 'while' 语句下面的代码行:
inputStream.next(); // Ignores the first line
但这是 skipping/ignoring 个元素,而不是整行,所以我不得不将其更改为:
inputStream.nextLine(); // Ignores the first line
我正在制作一个 android 应用程序,我想知道为什么我的代码中收到 java.lang.ArrayIndexOutOfBoundsException
:
InputStreamReader inputStreamReader;
try {
inputStreamReader = new InputStreamReader(getAssets().open("myFile.csv"));
Scanner inputStream = new Scanner(inputStreamReader);
inputStream.next(); // Ignores the first line
while (inputStream.hasNext()) {
String data = inputStream.nextLine();
String[] line = data.split(",");
entryArray.add(line[1]);
}
代码读取 CSV 文件,然后将文件中第二列的内容添加到全局 ArrayList<String>
(entryArray)。错误具体指向:
entryArray.add(line[1]);
但我不确定为什么。另外,当我将其更改为:
时也没有错误entryArray.add(line[0]);
我正在阅读的 CSV 文件看起来有点像这样:
Name,Type,Description
programming,noun,the process of writing computer programs
也许您正在阅读一个空行,或者一个不包含 , 字符的行。在那种情况下,拆分数组只包含一个元素。
考虑只检查拆分数组是否足够大,如果不够大则跳过该行。
您可以尝试将倒数第二行更改为类似以下内容:
if (entryArray.size() > 1)
entryArray.add(line[1]);
或
if (entryArray.size() > 1)
entryArray.add(line[1]);
else
entryArray.add(line[0]);
感谢您的所有回答,但我找到了解决方案:
在我的代码中,我添加了一条日志消息来测试每个行数组中的元素数量,如下所示:
Log.d("This line length", "" + line.length);
而且我发现第一行只包含 1 个元素,而不是我预期的 3 个。 我发现问题出在 'while' 语句下面的代码行:
inputStream.next(); // Ignores the first line
但这是 skipping/ignoring 个元素,而不是整行,所以我不得不将其更改为:
inputStream.nextLine(); // Ignores the first line