How to split a string by another string in C# ?

To split a string by another string (not just a single character) in C#, you can use the string.Split method with a string array delimiter. Below are detailed explanations and examples:

1. Basic String Splitting

Use string.Split with a string delimiter and specify StringSplitOptions.

Syntax:

string[] result = input.Split(
    new[] { "delimiter" }, 
    StringSplitOptions.None // or StringSplitOptions.RemoveEmptyEntries
);

Example 1: Split by a string delimiter

using System;

class Program
{
    static void Main()
    {
        string input = "apple--banana--cherry";
        string[] delimiter = { "--" };

        string[] result = input.Split(delimiter, StringSplitOptions.None);

        foreach (string item in result)
        {
            Console.WriteLine(item);
        }
    }
}

Output:

apple
banana
cherry

2. Handling Empty Entries

Use StringSplitOptions.RemoveEmptyEntries to exclude empty results when delimiters are consecutive or at the start/end.

Example 2: Remove empty entries

string input = "---Hello---World---";
string[] delimiter = { "---" };

string[] result = input.Split(delimiter, StringSplitOptions.RemoveEmptyEntries);
// Result: ["Hello", "World"]

3. Multiple String Delimiters

Split using multiple string delimiters by passing an array of strings.

Example 3: Split by multiple delimiters

string input = "apple123banana456cherry";
string[] delimiters = { "123", "456" };

string[] result = input.Split(delimiters, StringSplitOptions.None);
// Result: ["apple", "banana", "cherry"]

4. Case-Insensitive Splitting

For case-insensitive splits, use Regex.Split with RegexOptions.IgnoreCase:

Example 4: Case-insensitive split

using System.Text.RegularExpressions;

string input = "HelloWORLDhello";
string pattern = "world"; 

// Split on "world" (case-insensitive)
string[] result = Regex.Split(input, pattern, RegexOptions.IgnoreCase);
// Result: ["Hello", "hello"]

5. Edge Cases

  • Empty Delimiter: Splitting by an empty string ("") throws an ArgumentException.
  • No Matches: If the delimiter isn’t found, the result is an array with the original string.

6. Performance Considerations

  • string.Split is efficient for simple cases.
  • Regex.Split is slower but offers flexibility (e.g., patterns, case insensitivity).

Summary

MethodUse CaseExample
string.SplitSimple splits with string delimiters.Split(new[] { "--" }, options)
Regex.SplitComplex splits (case-insensitive, regex patterns).Regex.Split(input, "pattern", options)
Multiple DelimitersSplit by multiple strings.Split(new[] { "123", "456" }, options)

Full Example Code

using System;
using System.Text.RegularExpressions;

class Program
{
    static void Main()
    {
        // Example 1: Basic split
        string input1 = "apple--banana--cherry";
        string[] result1 = input1.Split(new[] { "--" }, StringSplitOptions.None);
        Console.WriteLine("Example 1: " + string.Join(", ", result1)); // apple, banana, cherry

        // Example 2: Remove empty entries
        string input2 = "---Hello---World---";
        string[] result2 = input2.Split(new[] { "---" }, StringSplitOptions.RemoveEmptyEntries);
        Console.WriteLine("Example 2: " + string.Join(", ", result2)); // Hello, World

        // Example 3: Case-insensitive split with Regex
        string input3 = "HelloWORLDhello";
        string[] result3 = Regex.Split(input3, "world", RegexOptions.IgnoreCase);
        Console.WriteLine("Example 3: " + string.Join(", ", result3)); // Hello, hello
    }
}

Key Notes

  • Use string.Split for simple string-based splits.
  • Use Regex.Split for case insensitivity or regex patterns.
  • Always handle edge cases (e.g., empty delimiters, no matches).

Leave a Reply

Your email address will not be published. Required fields are marked *