我已声明String
数组。
String[] csvColumns = new String[5];
但是,从CSV
文件中读取时:
String[] csvColumns = new String[5]; // Explicitly including this declaration again in case Stack Overflow users need to see the scope of the variable.
String row; // Will receive each column of 1 line at a time of the CSV file.
while ((row = inFile.readLine()) != null) // BufferedReader used to parse CSV File.
{
csvColumns = row.split(","); // Each element of the array will recieve the value of each column.
// Initialise class attributes with each column.
}
如果CSV
文件的一行中的列不包含任何值(在我的文件中,这只能是最后一列的情况,因为该列不是强制性的并且包含有关特定问题的注释)然后csvColumns
将其大小减小1.如果我使用数组,我不知道这是如何实现的 - 但是我再说一遍新手程序员。
为什么会发生这种情况?
编辑*感谢这两个答案,非常有帮助。应该检查方法split
的返回类型! (谢谢@chrylis)。
答案 0 :(得分:4)
首先,csvColumns
不是静态的(它似乎是局部变量),其次,它是变量,而不是数组。您将重新分配值(数组引用)作为split
返回的新数组的引用。 (您创建并且从未使用的旧String[5]
没有任何指向它并将被垃圾收集。)
答案 1 :(得分:3)
数组不会改变它的大小。您只需按此行创建一个新数组
Private rng As New Random
Private Sub PictureBoxes_Click(sender As Object, e As EventArgs) Handles PictureBox3.Click,
PictureBox2.Click,
PictureBox1.Click
'Prcoess the PictureBox that was clicked.
ProcessPictureBox(DirectCast(sender, PictureBox))
End Sub
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
'Process a random PictureBox.
Dim pictureBoxes = {PictureBox1, PictureBox2, PictureBox3}
Dim pictureBox = pictureBoxes(rng.Next(pictureBoxes.Length))
ProcessPictureBox(pictureBox)
End Sub
Private Sub ProcessPictureBox(pictureBox As PictureBox)
'Use pictureBox here.
End Sub
并将其分配给csvColumns = row.split(",")
变量。
旧的csvColumns
数组将被垃圾收集,因为它不再被任何变量引用。
您可以更改
new String[5]
到
String[] csvColumns = new String[5];
您的代码仍然有效,因为您从不使用创建的数组。您只使用变量。