我有一个String [] LinesFromFile,它包含从文件加载的大约100行,例如
LinesFromFile [0]是“Line1”
LinesFromFile [1]是“Line2”
LinesFromFile [2]是“Line3”
...
LinesFromFile [99]是“Line100”
我现在想创建一个新的String [] SomeLinesFromFile,并为LinesFromFile中的一些行分配此变量。
我原本以为它会如此简单:
String[] SomeLinesFromFile = null;
int offset = 45;
for (i = 0; i < 10, i++)
{
SomeLinesFromFile[i] = LinesFromFile[offset + i];
}
我会假设这段代码会将SomeLinesFromFile [0]设置为SomeLinesFromFile [9],其值为LinesFromFile [46]至LinesFromFile [56]。
当我尝试在我的Android设备上运行它时,它会崩溃。我在这里缺少什么?
答案 0 :(得分:10)
String[] SomeLinesFromFile = null;
SomeLinesFromFile
为null
,因此您无法执行此操作:
SomeLinesFromFile[i] = ...
您需要先创建一个数组,例如:
String[] SomeLinesFromFile = new String[10];
<小时/> 顺便提一下,以大写字母开头命名变量被认为是不好的做法。因此,您应始终使用
someLinesFromFile
代替SomeLinesForFile
。
答案 1 :(得分:1)
你的第二个数组是null,用正确的维度初始化它(在你的情况下10应该足够了):
String[] SomeLinesFromFile = new String[10];
int offset = 45;
for (i = 0; i < 10, i++)
{
SomeLinesFromFile[i] = LinesFromFile[offset + i];
}
答案 2 :(得分:1)
改变这个:
String[] SomeLinesFromFile = null;
到此:
String[] SomeLinesFromFile = new String[10];
答案 3 :(得分:1)
您可以使用ArrayList来避免固定大小。
http://www.java-tips.org/java-se-tips/java.lang/use-of-arraylist-class.html
答案 4 :(得分:1)
您忘记初始化字符串数组:
String[] SomeLinesFromFile = new String[10];
答案 5 :(得分:1)
SomeLinesFromFile [i]不存在。 SomeLinesFromFile设置为null。你可以尝试这样的事情:
String[] SomeLinesFromFile = new String[0];
String[] Temp = null;
int offset = 45;
for (i = 0; i < 10, i++)
{
Temp = new String[SomeLinesFromFile.length +1];
if(SomeLinesFromFile.length>0){
System.arraycopy(SomeLinesFromFile, 0, Temp, 0, SomeLinesFromFile.length;
}
Temp[i] = LinesFromFile[offset+i];
SomeLinesFromFile = new String[Temp.length];
System.arraycopy(Temp, 0, SomeLinesFromFile, 0, Temp.length);
}
这是一个粗略的草图,所以可能有一些我错过了,但这是它的要点。可能有更好或更简单的方法,但这就是我能想到的。如果您需要,这是arraycopy上的文档。基本上,您有一个临时数组可以提取新信息。然后它将它存储在另一个数组中,以允许创建一个新的临时数组以提取更多信息。
答案 6 :(得分:0)
SomeLinesFromFile
是null
(您可能会在日志中看到)。
我建议使用List,例如LinkedList或ArrayList。使用方法toArray()