2010-07-26 5 views
9

Ich habe ein Zeichenketten wie "/ LM/W3SVC/1216172363/root/175_Jahre_STAEDTLER_Faszination_Schreiben"Wie schneidet einen String

Und ich brauche nur "175_Jahre_STAEDTLER_Faszination_Schreiben" where "root" Separator ist. Wie kann ich das machen?

+0

+1 für den Titel, es erinnert mich, wie Syntax korrekt markieren einen Löwen –

+4

... verwenden Sie Schere? – Randolpho

+1

Wie lang ist das Stück Schnur? –

Antwort

2

Überprüfen Sie die System.IO.Path-Methoden - nicht ganz Dateien und Ordner, aber mit/delimiter könnte es nur funktionieren!

+4

Dies scheint, als könnte es für einige hässliche Nebenwirkungen anfällig sein. –

+0

@Mike - ja, Sie könnten Recht haben. Ich mag die .split Antworten besser. – n8wrl

+0

Ja, aufgrund von Annahmen darüber, was ein gültiges Trennzeichen darstellt. Am besten zu vermeiden. –

20

"/LM/W3SVC/1216172363/root/175_Jahre_STAEDTLER_Faszination_Schreiben".Split("/root/")[1] sollten Sie "175_Jahre_STAEDTLER_Faszination_Schreiben"

+5

Natürlich sollten Sie es wahrscheinlich einer Variablen zuweisen und prüfen, ob es die Zeichenfolge richtig aufteilen konnte, um Ausnahmen für schlecht gebildete Zeichenfolgen zu vermeiden. – NickAldwin

0

Verwenden String.Split die Zeichenfolge mit "root" als Trennzeichen zu trennen. Verwenden Sie dann das zweite Element des resultierenden Arrays.

0
string s = "/LM/W3SVC/1216172363/root/175_Jahre_STAEDTLER_Faszination_Schreiben"; 
int li = s.LastIndexOf("root/"); 
s = s.Substring(li + 5, s.Length - 1 - (li + 4)); 
MessageBox.Show(s); 
+1

Er erwähnte, dass er sich auf "root" aufteilen wollte, nicht unbedingt auf einen willkürlichen Schrägstrich ... aber das ist gut für die allgemeine Aufteilung. – NickAldwin

+0

Ja, du hast recht Nick. Ich bearbeite meine Antwort, danke – anilca

4

Eine andere Methode:

String newstring = file_path.Substring(file_path.LastIndexOf('/') + 1); 
1

Wenn Sie einen Teil einer Zeichenfolge auf einem Gesamtmuster basiert zu extrahieren suchen, reguläre Ausdrücke kann eine gute Alternative in einigen Situationen sein.

string s = "/LM/W3SVC/1216172363/root/175_Jahre_STAEDTLER_Faszination_Schreiben"; 
Regex re = new Regex(@"/root/(?<goodPart>\w+)$"); 
Match m = re.Match(s); 
if (m.Success) { 
    return m.Groups["goodPart"].ToString(); 
} 
+0

Regex ist definitiv eine gute Lösung für kompliziertere Probleme (und ich habe keine Ahnung, wie kompliziert das OP-Problem tatsächlich ist) ... Sie müssen nur die kleinen Leistungseinbußen berücksichtigen. Regex hat seinen Platz, aber wenn ein einfacher Split oder Teilstring den Trick macht, kann die Verwendung regulärer Ausdrücke tatsächlich schädlich sein. (Ich habe nichts gegen Regexes; ich benutze sie die ganze Zeit!Ich gebe nur hilfreiche Kommentare :) – NickAldwin

+0

@NickAldwin, stimme ich zu, nur eine Alternative für die Vollständigkeit zu präsentieren. Ich habe meine Antwort bearbeitet, um das ein wenig klarer zu machen, hoffe ich. –

+0

Ja, das verstehe ich, und ich denke, es ist wichtig, die Alternativen sichtbar zu haben (daher mein upvote :). Ich habe gerade den Punkt Regex gegen Split geklärt. Danke für das Posten (und für die Klarheit der Bearbeitung)! – NickAldwin

0

Wenn Sie einen relativen Pfad auf einem Basispfad basierte finden (was es klingt wie das, was das Problem, das Sie zu lösen versuchen, oder zumindest eine Verallgemeinerung des Problems) können Sie das System verwenden. Uri-Klasse. Es hat jedoch seine Grenzen. Der sauberste und korrekteste Weg, einen relativen Pfad zu finden, ist die Verwendung von DirectoryInfo. Mit DirectoryInfo können Sie den Verzeichnisbaum (rückwärts oder vorwärts) "laufen" und daraus eine Hierarchie erstellen. Machen Sie dann eine kleine Set-Manipulation, um Duplikate herauszufiltern und was Sie übrig haben, ist Ihr relativer Pfad. Es gibt einige Details, wie das Hinzufügen von Ellipsen an der richtigen Stelle, etc ..., aber DirectoryInfo ist ein guter Ausgangspunkt, um Pfade basierend auf der aktuellen Betriebssystemplattform zu analysieren.

FYI - Ich habe gerade eine Komponente hier bei der Arbeit fertig, um genau das zu tun, also ist es ziemlich frisch in meinen Gedanken.

1
string s = "/LM/W3SVC/1216172363/root/175_Jahre_STAEDTLER_Faszination_Schreiben"; 
string separator = "root"; 
string slash = "/"; 
int idx = s.IndexOf(separator); 
string result = s.SubString(idx + separator.Length + slash.Length);