c # string.replace в цикле foreach

Я попробовал, сам ... Нашел, что это не сработало. Поэтому я проверяю исходный код ArrayAdapter и выяснил проблему. ArrayAdapter, будучи инициализированным массивом, преобразует массив в AbstractList (List), который не может быть изменен.

Решение Используйте вместо ArrayList массив при инициализации ArrayAdapter.

String[] array = {"a","b","c","d","e","f","g"}; 
ArrayList lst = new ArrayList(Arrays.asList(array));
final ArrayAdapter adapter = new ArrayAdapter(this, 
android.R.layout.simple_list_item_1, lst); 

Приветствия!

13
задан Filip Ekberg 26 April 2010 в 10:04
поделиться

5 ответов

Вы говорите, что вам нужно решение LINQ ... это просто:

var replacedNames = names.Select(x => x.Replace("pdf", "txt"));

Мы не знаем тип имен , но если вы хотите назначить его обратно, вы потенциально можете использовать ToArray или ToList :

// If names is a List<T>
names = names.Select(x => x.Replace("pdf", "txt")).ToList();
// If names is an array
names = names.Select(x => x.Replace("pdf", "txt")).ToArray();

Вы должны знать, что опубликованный вами код не использует LINQ на данный момент вообще есть ...

32
ответ дан 1 December 2019 в 17:25
поделиться

Строки в C # неизменяемы (не изменяются), поэтому s.Replace вернет новую строку . К сожалению, это означает, что вы не можете использовать foreach для обновления. Если имена являются массивом, это должно работать:

for(int i = 0; i < names.Length; i++)
{
    names[i] = names[i].Replace("pdf", "txt");
}
23
ответ дан 1 December 2019 в 17:25
поделиться

s.Replace - это функция, поэтому вам нужно s = s.Replace () .. хотя лучше использовать StringBuilder. (см. ответ вверху)

0
ответ дан 1 December 2019 в 17:25
поделиться

Как уже упоминалось, вам нужно будет использовать цикл for , чтобы сделать это на месте. Однако, если вам не нужно, чтобы операция выполнялась на месте (т.е. результаты могут быть другой коллекцией), вы также можете сделать это как запрос linq, например

var results = from name in names select name.Replace("pdf", "txt");

Одно но: похоже, вы пытаетесь изменить расширение некоторых имен файлов. Если это то, что вы пытаетесь сделать, я бы порекомендовал Path.ChangeExtension , который специально разработан для этой цели.

var results = from name in names select Path.ChangeExtension(name, "txt");
3
ответ дан 1 December 2019 в 17:25
поделиться

Зачем использовать замену, это замедлит работу приложения. Используйте регулярное выражение:

http://msdn.microsoft.com/en-us/library/system.text.regularexpressions.regex.replace.aspx

-1
ответ дан 1 December 2019 в 17:25
поделиться
Другие вопросы по тегам:

Похожие вопросы: