2017-04-21 2 views
-6

Ich möchte das Ende eines Strings nach dem ersten Auftreten eines bestimmten Zeichens trimmen, in diesem Fall '.'Wie trim das Ende eines Strings nach dem ersten Auftreten eines Char C#

Dieses Zeichen erscheint mehrmals in der Zeichenfolge.

  • Eingang: 143.122.124.123
  • Ausgang: 143

ich mehrere ähnliche Fragen wie diese alhtough sie alle verwenden LastIndexOf() finden können; Wo dies das erste Vorkommen erfordert und den Rest der Zeichenfolge entfernen.

+7

Verwenden IndexOf anstelle von LastIndexOf dann? :) – john

+4

Viele ähnliche Themen: 1. http://stackoverflow.com/questions/6578254/to-get-specific-part-of-a-string-in-c-sharp 2. http://stackoverflow.com/ Fragen/10868517/split-string-and-get-first-value-only – swdev95

+1

Mögliches Duplikat von [trim string am Ende der Zeichenfolge] (http://stackoverflow.com/questions/4226657/trim-string-at- the-end-of-the-string) – Fabiano

Antwort

5
input.Substring(0, input.IndexOf('.')) 

Erläuterung:

  1. Verwenden String.IndexOf(char) zu erhalten nullbasierten Index des ersten char Vorkommen in einem String. Z.B. Für Ihre Eingabe ist es das vierte Zeichen mit dem Index 3.
  2. Verwenden Sie String.Substring(startIndex,length), um die Teilzeichenfolge vom Anfang der Zeichenfolge abzurufen. Verwenden Sie den Index von char als die Länge der Teilzeichenfolge, da der Index nullbasiert ist.

Anmerkung:

Vor dieser Lösung (Vergleich zur Verwendung von Split) ist, dass es nicht-Arrays im Speicher erstellen und wird alle Zeichenfolge Suche nach Split Charakter und Extrahieren Strings nicht durchqueren.

Nachteile dieser Lösung ist, dass String muss mindestens ein Zeichen enthalten, die Sie suchen (Danke an Ivan Chepikov für die Erwähnung). Sichere Alternative wie

int index = input.IndexOf('.'); 
if (index != -1) 
    substring = input.Substring(0, index); 

Eigentlich aussehen wird, gibt es eine Menge von Optionen zu tun, was Sie wollen:

  1. Schnell input.Substring(0, input.IndexOf('.'))
  2. Minimalistic input.Split('.')[0]
  3. Für Regex Liebhaber Regex.Match(input, @"[^\.]*").Value
  4. Für LINQ Maniacs new string(input.TakeWhile(ch => ch != '.').ToArray())
  5. Erweiterungsmethoden für Liebhaber von sauberem Code. input.SubstringUpTo('.')
+1

Es wäre gut, dieses input.IndexOf ('.')! = -1 zu überprüfen, nur um sicher zu sein, dass die Eingabe das Zeichen enthält. –

2
string input = "143.122.124.123"; 
string output = input.Split('.')[0]; 

Dies wird die gesamte Zeichenfolge zurück, wenn die Split Zeichen nicht gefunden wird.

+2

'input.Split (new char [] {'.'}, 2)' ist ein bisschen bessere Wahl (im Falle von langen Strings mit vielen Punkten) –

+0

@DmitryBychenko Eigentlich denke ich, Sie können die Zählung als '1' eher übergeben als '2'. –

+0

@Matthew Watson: Sorry, aber wir wollen '2' Elemente, sie sind:' 143' und '122.124.123' –

1

(Ich poste das nur der Vollständigkeit halber - die Antwort von Sergey scheint korrekt und am einfachsten zu sein.)

(1) Ein Linq Ansatz:

s = new string(s.TakeWhile(c => c != '.').ToArray()); 

(2) Das gleiche wie Sergey Antwort, aber eine Left() Strangerweiterung mit:

string s = "143.122.124.123"; 
s = s.Left(s.IndexOf('.')); 

wirklich tun sollten Überprüfung Fehler aber:

string s = "143.122.124.123"; 
int n = s.IndexOf('.'); 

if (n >= 0) 
    s = s.Left(n); 

Hinweis: Die Left() Methode ist eigentlich eine Erweiterung Methode, also ist es wirklich nur das gleiche wie Sergey Antwort:

public static class StringExt 
{ 
    public static string Left(this string self, int count) 
    { 
     string result = self.Length <= count 
      ? self 
      : self.Substring(0, count); 

     return result; 
    } 
} 
+1

Kannst du einen Link zur 'Left' Methodendokumentation geben? –

+0

@SergeyBerezovskiy Hoppla Ich habe versehentlich eine Erweiterungsmethode verwendet; Ich werde es hinzufügen! –

+0

Danke, jetzt ist es klar. Ich dachte, es gibt ein Framework-Update, das ich verpasst habe :) –

0

Und jetzt haben wir Nüsse und bestehen zur Verwendung von .LastIndexOf():

string input = "143.122.124.123"; 
string rev = new string(input.Reverse().ToArray()); 
string output = new string(rev.Substring(rev.LastIndexOf('.') + 1).Reverse().ToArray()); 
Verwandte Themen