2013-07-30 3 views
-1

Я сохранил все URL-адреса в своем приложении с помощью «http: //» - теперь мне нужно пройти и заменить все на «https:». Прямо сейчас у меня есть:Как заменить «http:» на «https:» в строке с C#?

foreach (var link in links) 
     { 
      if (link.Contains("http:")) 
      { 
       /// do something, slice or replace or what? 
      } 
     } 

Я просто не уверен, что лучший способ обновить строку будет. Как это может быть сделано?

+9

Google является ваш друг: попробуйте 'C# Заменить строку'. –

+0

Holy downvotes ... Я пробовал искать! – SB2055

+0

Я ничего не делал, чтобы быть ясным. –

ответ

9

Проблемы ваших строк в коллекции, а так строки неизменяемы, вы не можете изменить их напрямую. Поскольку вы не указали тип из links (List? Array?) Правильный ответ немного изменится. Самый простой способ, чтобы создать новый список:

links = links.Select(link => link.Replace("http://","https://")).ToList(); 

Однако, если вы хотите, чтобы минимизировать количество изменений, и может получить доступ к строке по индексу вы можете просто цикл по коллекции:

for(int i = 0; i < links.Length; i++) 
{ 
    links[i] = links[i].Replace("http://","https://"); 
} 
+0

лучший ответ из-за linq – wudzik

+1

Он не будет работать с URL-адресом: http://example.com/http:abc – empi

+0

@DStanley Я действительно хотел сказать, что этот ответ лучше всего (без сакрамента вообще), извините, если вы были оскорблены – wudzik

1

Используйте string.Replace и некоторые LINQ:

var httpsLinks = links.Select(l=>l.Replace("http://", "https://"); 
+1

'link' является элементом коллекции; коллекция не увидит изменения. – jason

+0

Oooooooh. Правильно! – zmbq

1

на основе текущего кода, link не будет заменить все, что вы хотите, потому что это только для чтения (см здесь: Why can't I modify the loop variable in a foreach?). вместо того, чтобы использовать for

for(int a = 0; a < links.Length; a++) 
{ 
    links[a] = links[a].Replace("http:/","https:/") 
} 
8

Если вы имеете дело с унифицированными идентификаторами, вы, вероятно, хотите использовать UriBuilder, поскольку делает строку заменить на структурированных данных, как URI, не является хорошей идеей.

var builder = new UriBuilder(link); 
builder.Scheme = "https"; 
Uri modified = builder.Uri; 

Это не ясно, что тип links есть, но вы можете создать новую коллекцию с модифицированной URIs с помощью LINQ:

IEnumerable<string> updated = links.Select(link => { 
    var builder = new UriBuilder(link); 
    builder.Scheme = "https"; 
    return builder.ToString(); 
}); 
+2

Ты избил меня - я собирался сказать то же самое. Вопрос действительно спрашивает, как изменить схему URL-адреса, и хотя замена строки, вероятно, безопасна, это лучший способ достичь цели. –

+0

Вы также можете использовать инициализатор объекта для создания 'UriBuilder' как выражения вместо операторов. Это позволит вам, например, использовать выражение запроса: 'var updated = from link in links select new UriBuilder (link) {Scheme =" https "} .ToString();' – Quartermeister

+0

Имейте в виду также изменить порт на 443 – ranieuwe

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