wake-up-neo.com

Substring: Index und Länge müssen sich auf eine Position innerhalb der Zeichenfolge beziehen

Ich habe einen String, der aussieht 

string url = "www.example.com/aaa/bbb.jpg";

"www.example.com/" ist 18 fest in der Länge. Ich möchte den Teil "aaa/bbb" aus dieser Zeichenfolge erhalten (die tatsächliche URL ist jedoch weder Beispiel noch aaa/bbb, die Länge kann variieren).

also hier ist was ich getan habe:

string newString = url.Substring(18, url.Length - 4);

Dann bekam ich die Ausnahme: Index und Länge müssen sich auf einen Ort innerhalb des Strings beziehen. Was ist falsch an meinem Code und wie kann er behoben werden? Danke im Voraus.

21
Manto

Der zweite Parameter in Substring ist die Länge der Teilzeichenfolge, nicht der Endindex.

Sie sollten wahrscheinlich die Handhabung einschließen, um zu überprüfen, ob sie tatsächlich mit dem beginnt, was Sie erwarten, enden mit dem, was Sie erwarten, und mindestens so lang ist, wie Sie es erwarten. Und wenn es nicht passt, können Sie entweder etwas anderes tun oder einen sinnvollen Fehler auslösen.

Hier ist ein Beispielcode, der bestätigt, dass die URL Ihre Zeichenfolgen enthält. Dieser Code wurde ebenfalls ein wenig umgestaltet, um das Abändern des Präfixes/Suffixes zu vereinfachen:

var prefix = "www.example.com/";
var suffix = ".jpg";
string url = "www.example.com/aaa/bbb.jpg";

if (url.StartsWith(prefix) && url.EndsWith(suffix) && url.Length >= (prefix.Length + suffix.Length))
{
    string newString = url.Substring(prefix.Length, url.Length - prefix.Length - suffix.Length);
    Console.WriteLine(newString);
}
else
    //handle invalid state
43
Tim S.

Ihr Fehler sind die Parameter für den Teilstring. Der erste Parameter sollte der Startindex sein und der zweite sollte die Länge oder den Abstand vom Startindex sein.

string newString = url.Substring(18, 7);

Wenn die Länge der Teilzeichenfolge variieren kann, müssen Sie die Länge berechnen.

Etwas in Richtung (url.Length - 18) - 4 (oder url.Length - 22

Am Ende wird es so aussehen

string newString = url.Substring(18, url.Length - 22);
6
MAV

Wie wäre es mit so etwas:

string url = "http://www.example.com/aaa/bbb.jpg";
Uri uri = new Uri(url);
string path_Query = uri.PathAndQuery;
string extension =  Path.GetExtension(path_Query);

path_Query = path_Query.Replace(extension, string.Empty);// This will remove extension
5
HatSoft

Sie müssen die Position des ersten / finden und dann den gewünschten Anteil berechnen:

string url = "www.example.com/aaa/bbb.jpg";
int Idx = url.IndexOf("/");
string yourValue = url.Substring(Idx + 1, url.Length - Idx - 4);
4
Ken White

Versuche dies:

 int positionOfJPG=url.IndexOf(".jpg");
 string newString = url.Substring(18, url.Length - positionOfJPG);
2
Bishnu Paudel
string newString = url.Substring(18, (url.LastIndexOf(".") - 18))
2
Bastardo

Sie können die Polsterung richtig verwenden.

string url = "www.example.com/aaa/bbb.jpg";
string newString=url.PadRight(4);
string newString = (url.Substring(18, url.Length - 4)).Trim();

Viel Spaß beim Codieren!

0
Pramod Mali

Hier ist ein weiterer Vorschlag. Wenn Sie http: // Ihrer URL-Zeichenfolge voranstellen können, können Sie dies tun

  string path = "http://www.example.com/aaa/bbb.jpg";
  Uri uri = new Uri(path);            
  string expectedString = 
      uri.PathAndQuery.Remove(uri.PathAndQuery.LastIndexOf("."));