2012-04-30 2 views
2

У меня есть String [] LinesFromFile, который содержит около 100 строк, загружаемых из файла, например.Проблемы со строкой []

LinesFromFile [0] является "Line1"

LinesFromFile [1] является "Line2"

LinesFromFile [2] является "Line3"

...

LinesFromFile [99] - «Линия100»

Я хочу создать новую 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; 

SomeLinesFromFile является null, так что вы не можете сделать:

SomeLinesFromFile[i] = ... 

Вам нужно создать массив первых, например:

String[] SomeLinesFromFile = new String[10]; 


Кстати, это считается плохим практикуйте, чтобы называть ваши переменные, начиная с заглавных букв. Поэтому вы всегда должны использовать someLinesFromFile вместо SomeLinesForFile.

+1

Я знал, что это было нечто тривиальное :-( – automationguy

1

Ваш второй массив имеет нулевое значение, инициализировать его с правой размерностью (10 должно быть достаточно в вашем случае):

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

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

SomeLinesFromFile является null (который, вероятно, можно увидеть в журналах). Я предлагаю использовать, кстати, список, например LinkedList или ArrayList. Они могут быть преобразованы в массив, а когда вы закончите с использованием метода toArray()

1

Изменить это:

String[] SomeLinesFromFile = null; 

к этому:

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

Вы забыли инициализировать массив строк:

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

SomeLinesFromFile [я] не существует. 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

Смежные вопросы