Как сохранить строковый буфер в массив строк?

Привет, я читаю данные sqlite db и сохраняю их в строковый буфер. Я хочу отобразить его в виде списка в Android. я столкнулся с небольшой проблемой. пожалуйста, помогите мне решить эту проблему.

String studentno=cursor.getString(1);
String date=cursor.getString(2);
buffer.append("student: "+studentno+"  Time:"+date+"\n");
String data=buffer.toString();
Log.d("student: "+studentno+"  Time:"+date);

вывод: student: 1234 Time:12:13 student: 1234 Time:12:14 student: 1234 Time:12:15

Я хочу сохранить строковый буфер, подобный этому values[0]=student: 1234 Time:12:13 values[1]=student: 1234 Time:12:14 values[2]=student: 1234 Time:12:15

Я пробовал кодировать ниже, но он не работает.

String[] values = data.split("");
for (int i = 0; i < values.length; ++i) {
list.add(values[i]);
}

Есть какой-либо способ сделать это. заранее спасибо.


person subramaniam    schedule 12.03.2015    source источник


Ответы (3)


Кажется, вы добавляете данные в буфер с новым разделителем строк в конце. Разделение их должно выглядеть так: data.split("\n");

Однако это не кажется хорошей идеей. Главным образом потому, что у вас может быть очень большой набор данных, а разделение — дорогостоящая операция.

Почему бы не создать ArrayList<String> и не вызвать list.add("student: " + studentno + " Time: " + date) или другую более эффективную структуру?

Код:

List<String> list = new ArrayList<String>();

String studentno=cursor.getString(1);
String date=cursor.getString(2);
list.add("student: " + studentno + " Time: " + date);
person Smajl    schedule 12.03.2015

Это не имеет никакого смысла. Если вы хотите хранить данные в массиве, не храните их в StringBuffer в первую очередь. Сохраните его непосредственно в массиве.

У вас должен быть цикл, в котором вы читаете данные:

String[] arr = new String [...];
int count = 0;
while (cursor.next() && count < arr.length) {
    String studentno=cursor.getString(1);
    String date=cursor.getString(2);
    arr[count] = "student: "+studentno+"  Time:"+date+"\n";
    count++;
}
person Eran    schedule 12.03.2015
comment
Как вы можете объяснить мне подробно. Я использовал data.split(\n); сейчас работает Эран. - person subramaniam; 12.03.2015
comment
его рабочий Эран. но я не могу знать размер массива строк. мы не можем указать предопределенный размер. Мы не знаем, сколько данных будет поступать из БД. как я могу дать динамический размер. если я ошибаюсь, пожалуйста, поправьте меня. - person subramaniam; 12.03.2015
comment
@subramaniam В этом случае вы можете добавить данные в ArrayList (емкость которого является динамической), а затем преобразовать в массив с помощью метода toArray. - person Eran; 12.03.2015
comment
@Eran, у меня такая же проблема, можешь решить ее, пожалуйста......stackoverflow.com/questions/40948014/ - person Secret_Volcano; 04.12.2016

Вы можете попробовать заменить свой разделенный вызов следующим:

String[] values = data.split("\n");
person teemann    schedule 12.03.2015