2016-04-28 6 views
1

Ich habe eine Zeichenfolge wie unten.Wie bekomme ich den URL Teil in C#?

string filePath = @"http://s.ion.com/abc/Std/isd/text.txt" or @"http://s.ion.com/abc/Std/isd/wer/we/wed/text.txt" or @"http://s.ion.com/abc/Std/isd/wer/we/wed/sa/ser/text.txt" 

Ich brauche die Ausgabe als @"http://s.ion.com/abc/Std/isd"

I substring.IndxcOf Methode versucht haben, zu bekommen, und ich habe allein isd oder std.

Bitte helfen Sie dabei.

Antwort

0
string filePath = @"http://s.ion.com/abc/Std/isd/text.txt"; 
int index = filePath.LastIndexOf('/'); 
string url = filePath.Substring(0, index); 
+0

wenn nehme an, wenn ich einen Weg wie Zeichenfolge haben filePath = @ "http://s.ion.com/abc/Std/isd/ser/wer/text.txt "; Wie kann ich fortfahren, um die gleiche Ausgabe zu erhalten? –

+0

meinst du, wenn es kein "http: //" vor der Zeichenkette gibt, wie bekommst du eine Ausgabe mit "http: //" davor? if (! url.StartsWith (@ "http: //")) {url = @ "http: //" + URL; } –

+0

Sie liegen falsch. Ich muss output wie "http://s.ion.com/abc/Std/isd", wenn die Zeichenfolge "http://s.ion.com/abc/Std/isd/ser/wer/text. txt"; –

2

Ursprüngliche Antwort:

den String in ein Uri Objekt konvertieren, können Sie folgendes tun:

//filePath = @"http://s.ion.com/abc/Std/isd/text.txt" 

Uri uri = new Uri(filePath); 
string output = uri.AbsoluteUri.Remove(uri.AbsoluteUri.Length - uri.Segments.Last().Length - 1); // -1 removes the '/' character at the end 

// output = "http://s.ion.com/abc/Std/isd" 

* Hinweis: Die Last() Funktion ist von der System.Linq Bibliothek. Wenn Sie diese Bibliothek nicht verwenden, können Sie immer noch das letzte Segment erhalten, indem Sie uri.Segments.Last().Length durch uri.Segments[uri.Segments.Length - 1].Length ersetzen.

Updated Antwort basierend auf this comment:

//filePath = @"http://s.ion.com/abc/Std/isd/ser/wer/text.txt" 

Uri uri = new Uri(filePath); 
string output = uri.AbsoluteUri.Remove(uri.AbsoluteUri.Length - uri.Segments.[uri.Segments.Length - 3].Length - 1); 

// uri.Segments.Length - 3 removes the last 3 unrequired "segments" 
// -1 removes the '/' character at the end 

// output = "http://s.ion.com/abc/Std/isd" 

Aktualisiert Antwort basierend auf der letzten Revision:

//filePath = @"http://s.ion.com/abc/Std/isd/wer/we/wed/sa/ser/text.txt" 

Uri uri = new Uri(filePath); 
string output = uri.AbsoluteUri.Remove(uri.AbsoluteUri.Length - uri.Segments.[uri.Segments.Length - 6].Length - 1); 

// uri.Segments.Length - 6 removes the last 6 unrequired "segments" 
// -1 removes the '/' character at the end 

// output = "http://s.ion.com/abc/Std/isd" 

Wenn diese drei Saiten möglich sind, dann können Sie tun eine bedingte Anweisung, um festzustellen, welche Zeichenfolge manipuliert werden soll.

if (/* string 1 */) 
    // see original response 
else if (/* string 2 */) 
    // see first updated response 
else if (/* string 3 */) 
    // see second updated response 
+0

wenn ich einen Pfad wie String filePath = @ "s.ion.com/abc/Std/isd/ser/wer habe /text.txt ";; Wie kann ich fortfahren, um die gleiche Ausgabe zu erhalten? –

+0

@ user2505309 Siehe meine aktualisierte Antwort. Ich habe das "http: //" beibehalten, um die Integrität meiner Antwort zu wahren. Müssen Sie nicht "http: //" haben? –

+0

8 Ich brauche http: //. Jetzt habe ich die ursprüngliche Abfrage geändert.Bitte beachten Sie, dass –

-1

Ich bin auf dem Kontext nicht sicher, aber ich versuche immer, und die Dateinamen und den Pfad getrennt für die spätere Code-Änderung zu halten.

Sie sollten immer in der Lage sein, Ihren Pfad mit einem Path.GetDirectoryName zu erhalten. Wenn Sie andere Dateinamen benötigen, wird der Code viel sauberer.

+0

wenn ich annehmen, wenn ich einen Pfad wie Zeichenfolge filePath = @ "s.ion.com/abc/Std/isd/ser/wer/text.txt" ;; Wie kann ich fortfahren, um die gleiche Ausgabe zu erhalten? –

0

Wie wärs mit einem regex

var url = "http://s.ion.com/abc/Std/isd/text.txt"; 
// or  "http://s.ion.com/abc/Std/isd/wer/we/wed/text.txt" 
// or  "http://s.ion.com/abc/Std/isd/wer/we/wed/sa/ser/text.txt" 
// or  "s.ion.com/abc/Std/isd/ser/wer/text.txt" 

var match = Regex.Match(url, @"^(?:http:\/\/)?(.*isd)(?=\/)"); 
Console.WriteLine("http://" + match.Groups[1]); 

// output: http://s.ion.com/abc/Std/isd 
+0

Die Ausgabe ist die gleiche, unabhängig davon, ob sie bereits das 'http: //' -Schema enthält oder in welchem ​​Unterverzeichnis Sie sich befinden. –

Verwandte Themen