2012-04-30 190 views
2

我有一个String [] LinesFromFile,其中包含从文件加载的约100行,例如字符串问题[]

LinesFromFile [0]为 “线路1”

LinesFromFile [1]是 “线路2”

LinesFromFile [2]为 “3号线”

...

LinesFromFile [99]是“Line100”

我想现在创建一个新的Strin g [] 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设备上运行它时,它崩溃。我在这里错过了什么?

+2

您不能将值赋给'null [i]';你需要实例化一个数组来存储。 – mellamokb

回答

10
String[] SomeLinesFromFile = null; 

SomeLinesFromFilenull,所以你不能那么做:

SomeLinesFromFile[i] = ... 

您需要先创建一个数组,如:

String[] SomeLinesFromFile = new String[10]; 


顺便说一句,它被认为是不好练习以大写字母开头命名变量。所以你应该总是使用someLinesFromFile而不是SomeLinesForFile

+1

我知道这是件小事:-( – automationguy

1

你的第二个数组为null,用正确的尺寸初始化(10应该足够你的情况):

String[] SomeLinesFromFile = new String[10]; 
int offset = 45; 

for (i = 0; i < 10, i++) 
{ 
    SomeLinesFromFile[i] = LinesFromFile[offset + i]; 
} 
0

SomeLinesFromFilenull(这你也许可以在日志中看到)。 我建议使用列表,如LinkedList或ArrayList,而不是顺便说一句。它们可以被转换成一个阵列,以及当您使用方法toArray()

1

更改完成这件事:

String[] SomeLinesFromFile = null; 

这样:

String[] SomeLinesFromFile = new String[10]; 
1

你忘了初始化字符串数组:

String[] SomeLinesFromFile = new String[10]; 
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的文档。基本上,你有一个临时数组来拉取新的信息。然后它将它存储在另一个数组中,以允许创建一个新的临时数组以将更多信息输入到内存中。

+0

太复杂了, –

+1

几乎没有,首先它并没有那么复杂,其次是更有用的代码,当我看到这个问题时,显然的答案已经是给出大约7次初始化数组为10个元素如果有10个元素或者1000个,我的代码就可以工作,你的代码对细节的依赖程度越低,当你改变它时它就越有可能工作。例如,他将范围从10改为11,他会用这个问题中的任何其他代码片断寻找OutOfBounds异常。以为我会给出一个更加健壮的(仍然容易的)示例。 –

+0

Holo Dev你是正确答案虽然明显的答案足以满足我的需求,但你的方法是优秀的,程序员应该始终致力于使代码更健壮。 – automationguy