Как я могу обрезать строку в dart так, как я хочу

#string #dart

#строка #dart

Вопрос:

У меня есть следующая строка https://www.something.com/api/mmmm/media/mhm/something.jpg и я хочу обрезать эту строку, чтобы она стала https://www.something.com/media/mhm/something.jpg по сути, я хочу, чтобы он был динамическим, поэтому я не хочу жестко кодировать его, потому что URL-адрес не будет неизменным вечно, эта конкретная часть изменится. Другими словами, я хочу удалить все из /api/, пока оно не достигнет /media/, и, похоже, я не могу этого сделать.

Ответ №1:

Вы можете использовать Uri.parse для анализа URL-адреса и цикла, чтобы сегменты пути uri создавали новый uri с сегментами пути, которые вы хотите сохранить, например:

 void main() {
  var uri =
      Uri.parse('https://www.something.com/api/mmmm/media/mhm/something.jpg');

  var exclude = false;
  var newPath = <String>[];
  for (var seg in uri.pathSegments) {
    if (seg == 'api') {
      exclude = true;
      continue;
    }
    if (seg == 'media') {
      exclude = false;
    }
    if (!exclude) {
      newPath.add(seg);
    }
  }
  var newUri = uri.replace(pathSegments: newPath);
  print(newUri); //Prints https://www.something.com/media/mhm/something.jpg
}
  

Ответ №2:

Альтернативным решением было бы использовать регулярное выражение, подобное этому:

 void main() {
  print(
      trimString('https://www.something.com/api/mmmm/media/mhm/something.jpg'));
  // https://www.something.com/media/mhm/something.jpg

  print(trimString(
      'https://www.something.com/api/AlotOfStrangeThings/complateNonsense/amp;amp;amp;amp;amp;/media/mhm/something.jpg'));
  // https://www.something.com/media/mhm/something.jpg
}

String trimString(String string) =>
    string.replaceAll(RegExp(r'/api/(.*)/media/'), '/media/');
  

Комментарии:

1. Спасибо всем, я действительно ценю это!