C# Split A String By Another String

2018-12-31 21:57发布

问题:

I\'ve been using the Split() method to split strings, but this only appears to work if you are splitting a string by a character. Is there any way to split a string, with another string being the split by parameter? I\'ve tried converting the splitter into a character array, with no luck.

In other words, I\'d like to split the string:

THExxQUICKxxBROWNxxFOX

by xx, and return an array with values:

THE, QUICK, BROWN, FOX

回答1:

In order to split by a string you\'ll have to use the string array overload.

string data = \"THExxQUICKxxBROWNxxFOX\";

return data.Split(new string[] { \"xx\" }, StringSplitOptions.None);


回答2:

There is an overload of Split that takes strings.

\"THExxQUICKxxBROWNxxFOX\".Split(new [] { \"xx\" }, StringSplitOptions.None);

You can use either of these StringSplitOptions

  • None - The return value includes array elements that contain an empty string
  • RemoveEmptyEntries - The return value does not include array elements that contain an empty string

So if the string is \"THExxQUICKxxxxBROWNxxFOX\", StringSplitOptions.None will return an empty entry in the array for the \"xxxx\" part while StringSplitOptions.RemoveEmptyEntries will not.



回答3:

Regex.Split(string,\"xx\")

is the way I do it usually. Of course you\'ll need a

using System.Text.RegularExpressions;

but than again I need that lib all the time.



回答4:

There\'s an overload of String.Split for this:

\"THExxQUICKxxBROWNxxFOX\".Split(new [] {\"xx\"}, StringSplitOptions.None);


回答5:

I generally like to use my own extension for that:

string data = \"THExxQUICKxxBROWNxxFOX\";
var dataspt = data.Split(\"xx\");
//>THE  QUICK  BROWN  FOX 


//the extension class must be declared as static
public static class StringExtension
{   
    public static string[] Split(this string str, string splitter)
    {
        return str.Split(new[] { splitter }, StringSplitOptions.None);
    }
}

This will however lead to an Exception, if Microsoft decides to include this method-overload in later versions. It is also the likely reason why Microsoft has not included this method in the meantime: At least one company I worked for, used such an extension in all their C# projects.

It may also be possible to conditionally define the method at runtime if it doesn\'t exist.



回答6:

The above answers are all correct. I go one step further and make C# work for me by defining an extension method on String:

public static string[] Split(this string toSplit, string splitOn) {
    return toSplit.Split(new string[] { splitOn }, StringSplitOptions.None);
}

That way I can call it on any string in the simple way I naively expected the first time I tried to accomplish this:

\"a big long string with stuff to split on\".Split(\"g str\");


回答7:

string data = \"THExxQUICKxxBROWNxxFOX\";

return data.Replace(\"xx\",\"|\").Split(\'|\');

Just choose the replace character carefully (choose one that isn\'t likely to be present in the string already)!



回答8:

The easiest way is to use String.Replace:

string myString = \"THExxQUICKxxBROWNxxFOX\";
mystring = mystring.Replace(\"xx\", \", \");

Or more simply:

string myString = \"THExxQUICKxxBROWNxxFOX\".Replace(\"xx\", \", \");


回答9:

This is also easy:

string data = \"THExxQUICKxxBROWNxxFOX\";
string[] arr = data.Split(\"xx\".ToCharArray(), StringSplitOptions.RemoveEmptyEntries);