Как сложить все элементы массива строк?

318
16 марта 2017, 20:27

Пишу приложение на Android Studio. Через код по нажатию кнопки добавляются дополнительные поля к посту.

В цикле получаю значения с динамически добавленных полей. Вопрос: как занести все поля в переменную, чтобы в дальнейшем её использовать?

String[] items = new String[allEds.size()];
//запускаем чтение всех елементов этого списка и запись в массив
for (int i = 0; i < allEds.size(); i++) {
    String strNamePers = (items[i] = ((EditText) allEds.get(i).findViewById(R.id.perona1)).getText().toString());
    String strNameVoz = (items[i] = ((EditText) allEds.get(i).findViewById(R.id.peronavoz2)).getText().toString());
    String strNameTreb = (items[i] = ((EditText) allEds.get(i).findViewById(R.id.peronatreb3)).getText().toString());
    String strNameInt = (items[i] = ((EditText) allEds.get(i).findViewById(R.id.peronasumm4)).getText().toString());
    String hr="<hr>";
    String br = "<br>";
    fnlstr = (br +"название персонажа: " + strNamePers + br+"возраст: "+strNameVoz+br+"требования к типажу: "+strNameTreb+br+"Сумма оплаты"+strNameInt+br+hr);
    Log.d("mylog", "масив с полей " + fnlstr);
}

Проблема в том, что в переменной fnlstr хранится значение только последней итерации цикла. Как сделать, чтобы все итерации сложились в одну строку и занеслись в переменную fnlstr?

Answer 1

Если нужно соединить (конкатенировать) все полученные строки в одну, то делается это через оператор + (+=):

fnlstr += (br +"название персонажа: " + strNamePers + br+"возраст: "+strNameVoz+br+"требования к типажу: "+strNameTreb+br+"Сумма оплаты"+strNameInt+br+hr);    

Если до цикла fnlstr не инициализирована, то нужно это сделать.

fnlstr = "";
for...

К сожалению, конкатенация строк в цикле подобным образом неэффективна, т.к. на каждой итерации создается новая, более длинная строка. Поэтому когда нужно сложить строки в цикле используется StringBuilder.

StringBuilder fnlstrBuilder = new StringBuilder();
for (int i = 0; i < allEds.size(); i++) {
    //пропущен не имеющий отношения к делу код
    fnlstrBuilder.append(br +"название персонажа: " + strNamePers + br+"возраст: "+strNameVoz+br+"требования к типажу: "+strNameTreb+br+"Сумма оплаты"+strNameInt+br+hr);
}

После цикла можно получить строку с помощью toString:

fnlstr = fnlstrBuilder.toString();
READ ALSO
Как запретить выделять и редактировать TableView

Как запретить выделять и редактировать TableView

Мне необходимо выделить строку в таблице и затем "заблокировать" выделение и редактирование других строк до определенного действияКак это...

341
Как обновить данные JavaFx?

Как обновить данные JavaFx?

В TableView использую ObservableList<Product> productListЧтобы изменить необходимые данные- использую объект из коллекции, но после сохранения ничего не изменяется...

569
Нет доступа к методу из JavaScript: ScriptException: TypeError: note.getTitle is not a function

Нет доступа к методу из JavaScript: ScriptException: TypeError: note.getTitle is not a function

Нашёл пример для работы с скриптами в Java здесьСоздал свой класс Note, создал экземпляр, положил его в engine, запускаю его метод getTitle и получаю...

282
Тормозит css-анимация

Тормозит css-анимация

Суть вопроса в следующемНа сайте есть sidebar (выезжающее справа меню), анимация которого построена на css-transitions

538