2016-09-14 2 views
1

Ich möchte eine Zeichenfolge nach einem Wort, nicht nach dem Zeichen zu teilen. Zum Beispiel string:Teilen Sie die Zeichenfolge nach einem Wort

A-quick-brown-fox-jumps-over-the-lazy-dog 

Ich möchte die Zeichenfolge aufgeteilt nach "jumps-" kann ich die stringname.Split("jumps-") Funktion? Ich mag die folgende Ausgabe:

over-the-lazy-dog. 
+1

Sie vergessen haben, zu sagen, was ist String. – Jacobr365

Antwort

1
var theString = "A-quick-brown-fox-jumps-over-the-lazy-dog."; 
    var afterJumps = theString.Split(new[] { "jumps-" }, StringSplitOptions.None)[1]; //Index 0 would be what is before 'jumps-', index 1 is after. 
5

ich mit IndexOf und Substring vorschlagen, da Sie tatsächlich einen Suffix ("String nach dem Wort") wollen, keine gespalten:

string source = "A-quick-brown-fox-jumps-over-the-lazy-dog"; 
    string split = "jumps-"; 

    // over-the-lazy-dog 
    string result = source.Substring(source.IndexOf(split) + split.Length); 
0

Sie könnten die Split() Methode erweitern. Tatsächlich habe ich das vor ein paar Monaten getan. Wahrscheinlich nicht der schönste Code, aber es macht die Arbeit erledigt. Diese Methode wird bei jeder jumps- nicht nur bei der ersten aufgeteilt.

public static class StringExtensions 
{ 
    public static string[] Split(this String Source, string Separator) 
    { 
     if (String.IsNullOrEmpty(Source)) 
      throw new Exception("Source string is null or empty!"); 
     if (String.IsNullOrEmpty(Separator)) 
      throw new Exception("Separator string is null or empty!"); 


     char[] _separator = Separator.ToArray(); 
     int LastMatch = 0; 
     List<string> Result = new List<string>(); 


     Func<char[], char[], bool> Matches = (source1, source2) => 
     { 
      for (int i = 0; i < source1.Length; i++) 
      { 
       if (source1[i] != source2[i]) 
        return false; 
      } 
      return true; 
     }; 


     for (int i = 0; _separator.Length + i < Source.Length; i++) 
     { 
      if (Matches(_separator.ToArray(), Source.Substring(i, _separator.Length).ToArray())) 
      { 
       Result.Add(Source.Substring(LastMatch, i - LastMatch)); 
       LastMatch = i + _separator.Length; 
      } 
     } 

     Result.Add(Source.Substring(LastMatch, Source.Length - LastMatch)); 
     return Result.ToArray(); 
    } 
} 
0

Normalerweise verwende ich Erweiterung Methode:

public static string join(this string[] strings, string delimiter) { return string.Join(delimiter, strings); } 

public static string[] splitR(this string str, params string[] delimiters) { return str.Split(delimiters, StringSplitOptions.RemoveEmptyEntries); } 
//public static string[] splitL(this string str, string delimiter = " ", int limit = -1) { return vb.Strings.Split(str, delimiter, limit); } 

public static string before(this string str, string delimiter) { int i = (str ?? ""). IndexOf(delimiter ?? ""); return i < 0 ? str : str.Remove (i     ); } // or return str.splitR(delimiter).First(); 
public static string after (this string str, string delimiter) { int i = (str ?? "").LastIndexOf(delimiter ?? ""); return i < 0 ? str : str.Substring(i + delimiter.Length); } // or return str.splitR(delimiter).Last(); 

Probe Verwendung:

stringname.after("jumps-").splitR("-"); // splitR removes empty entries 
Verwandte Themen