2010-01-28 12 views
12

entfernen Ok ich habe eine Zeichenfolge, wo ich das letzte Wort entfernen möge geteilt durch \letztes Wort in Etikett Spaltung von

zum Beispiel:

string name ="kak\kdk\dd\ddew\cxz\" 

jetzt will ich das letzte Wort entfernen, so dass ich einen neuen Wert für Namen wie

name = "kak \ KDK \ dd \ ddew \"

bekommen, ist es eine einfache Möglichkeit, diese

zu tun 210

danke

Antwort

23

Wie erhalten Sie diese Zeichenfolge an erster Stelle? Ich nehme an, Sie wissen, dass '\' das Escape-Zeichen in C# ist. Sie sollten jedoch weit kommen von

name = name.TrimEnd('\\') 
name = name.Remove(name.LastIndexOf('\\') + 1); 
+0

Würde dies nicht nur die letzte \ und nicht cxz \ entfernen? – dtb

+0

Das würde wirklich nur die nachlaufenden entfernen \ –

+0

Ziemlich nah. Um die genaue Zeichenfolge zu erhalten, die er will, müssen Sie: name = name.TrimEnd ('\\'); name = name.Remove (name.LastIndexOf ('\\') + 1)) – ConsultUtah

5
string result = string.Join("\\", 
      "kak\\kdk\\dd\\ddew\\cxz\\" 
      .Split(new[] { '\\' }, StringSplitOptions.RemoveEmptyEntries) 
      .Reverse() 
      .Skip(1) 
      .Reverse() 
      .ToArray()) + "\\"; 
+2

Oh Liebes! Machst du Witze? –

+2

Zugegeben, ein bisschen. Aber es ist offensichtlich richtig, oder? Keine Verwirrung mit Indizes in der Zeichenfolge, oder kryptischen Regex usw. – dtb

+2

Ich finde es beängstigend, dass Sie in der Lage, mit dieser Lösung zu kommen ... ;-) – ConsultUtah

0

Dieser regex Ersatz verwenden sollte es tun:

name = Regex.Replace(name, @"\\[a-z]*\\$", "\\"); 
1

Hier ist eine nicht-regex Weise, es zu tun.

string newstring = name.SubString(0, name.SubString(0, name.length - 1).LastIndexOf('\\')); 
1

Versuchen Sie folgendes:

const string separator = "\\"; 
string name = @"kak\kdk\dd\ddew\cxz\"; 
string[] names = name.Split(separator.ToCharArray(), 
    StringSplitOptions.RemoveEmptyEntries); 
string result = String.Join(separator, names, 0, names.Length - 1) + separator; 
1

EDIT: Ich habe gerade bemerkt, dass name.Substring(0,x) zu name.Remove(x) entspricht, also habe ich meine Antwort zu reflektieren das geändert.

In einer einzigen Zeile:

name = name = name.Remove(name.Remove(name.Length - 1).LastIndexOf('\\') + 1); 


Wenn Sie es verstehen will, ist hier, wie es geschrieben (zu) werden könnte verbosely:

string nameWithoutLastSlash = name.Remove(name.Length - 1); 
int positionOfNewLastSlash = nameWithoutLastSlash.LastIndexOf('\\') + 1; 
string desiredSubstringOfName = name.Remove(positionOfNewLastSlash); 
name = desiredSubstringOfName; 
+0

Danke Mann ..Ich habe das auch versucht und das funktioniert auch .. – user175084

0
string name ="kak\kdk\dd\ddew\cxz\" 
string newstr = name.TrimEnd(@"\") 
+0

Auch wenn Sie Semikolons hinzufügen, das kompiliert (oder funktioniert) nicht. TrimEnd nimmt "params char []", keine Zeichenfolge. Und wenn Sie das Argument reparieren, wäre das Ergebnis "kak \ kdk \ dd \ ddew \ cxz", was das OP nicht will. – JeffH

0

Meine Lösung

public static string RemoveLastWords(this string input, int numberOfLastWordsToBeRemoved, char delimitter) 
     { 
      string[] words = input.Split(new[] { delimitter }); 
      words = words.Reverse().ToArray(); 
      words = words.Skip(numberOfLastWordsToBeRemoved).ToArray(); 
      words = words.Reverse().ToArray(); 
      string output = String.Join(delimitter.ToString(), words); 
      return output; 
     } 

Funktion n Anruf

RemoveLastWords("kak\kdk\dd\ddew\cxz\", 1, '\')