NCode.StringSegments 3.0.0

Prefix Reserved
dotnet add package NCode.StringSegments --version 3.0.0                
NuGet\Install-Package NCode.StringSegments -Version 3.0.0                
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="NCode.StringSegments" Version="3.0.0" />                
For projects that support PackageReference, copy this XML node into the project file to reference the package.
paket add NCode.StringSegments --version 3.0.0                
#r "nuget: NCode.StringSegments, 3.0.0"                
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
// Install NCode.StringSegments as a Cake Addin
#addin nuget:?package=NCode.StringSegments&version=3.0.0

// Install NCode.StringSegments as a Cake Tool
#tool nuget:?package=NCode.StringSegments&version=3.0.0                

ci Nuget

NCode.StringSegments

Provides the ability to split a string into substrings based on a delimiter without any additional heap allocations.

API

namespace NCode.Buffers;

/// <summary>
/// Provides extensions methods to split a string into substrings based on a
/// delimiter without any additional heap allocations.
/// </summary>
public static class StringExtensions
{
    /// <summary>
    /// Splits a string into substrings based on a delimiter without any
    /// additional heap allocations.
    /// </summary>
    /// <param name="value">The string to split into substrings.</param>
    /// <param name="separator">A character that delimits the substrings in the
    /// original string.</param>
    /// <returns>A <see cref="StringSegments"/> instance that contains the
    /// substrings from the string that are delimited by the separator.</returns>
    public static StringSegments SplitSegments(
        this string value,
        char separator);

    /// <summary>
    /// Splits a string into substrings based on a delimiter without any
    /// additional heap allocations.
    /// </summary>
    /// <param name="value">The string to split into substrings.</param>
    /// <param name="separator">The string that delimits the substrings in the
    /// original string.</param>
    /// <returns>A <see cref="StringSegments"/> instance that contains the
    /// substrings from the string that are delimited by the separator.</returns>
    public static StringSegments SplitSegments(
        this string value,
        ReadOnlySpan<char> separator);

    /// <summary>
    /// Splits a string into substrings based on a delimiter without any
    /// additional heap allocations.
    /// </summary>
    /// <param name="value">The string to split into substrings.</param>
    /// <param name="separator">The string that delimits the substrings in the
    /// original string.</param>
    /// <param name="comparisonType">An enumeration that specifies the rules for
    /// the substring search.</param>
    /// <returns>A <see cref="StringSegments"/> instance that contains the
    /// substrings from the string that are delimited by the separator.</returns>
    public static StringSegments SplitSegments(
        this string value,
        ReadOnlySpan<char> separator,
        StringComparison comparisonType);

    /// <summary>
    /// Splits a string into substrings based on a delimiter without any
    /// additional heap allocations.
    /// </summary>
    /// <param name="value">The string to split into substrings.</param>
    /// <param name="separator">A character that delimits the substrings in the
    /// original string.</param>
    /// <returns>A <see cref="StringSegments"/> instance that contains the
    /// substrings from the string that are delimited by the separator.</returns>
    public static StringSegments SplitSegments(
        this ReadOnlyMemory<char> value,
        char separator);

    /// <summary>
    /// Splits a string into substrings based on a delimiter without any
    /// additional heap allocations.
    /// </summary>
    /// <param name="value">The string to split into substrings.</param>
    /// <param name="separator">The string that delimits the substrings in the
    /// original string.</param>
    /// <returns>A <see cref="StringSegments"/> instance that contains the
    /// substrings from the string that are delimited by the separator.</returns>
    public static StringSegments SplitSegments(
        this ReadOnlyMemory<char> value,
        ReadOnlySpan<char> separator);

    /// <summary>
    /// Splits a string into substrings based on a delimiter without any
    /// additional heap allocations.
    /// </summary>
    /// <param name="value">The string to split into substrings.</param>
    /// <param name="separator">The string that delimits the substrings in the
    /// original string.</param>
    /// <param name="comparisonType">An enumeration that specifies the rules for
    /// the substring search.</param>
    /// <returns>A <see cref="StringSegments"/> instance that contains the
    /// substrings from the string that are delimited by the separator.</returns>
    public static StringSegments SplitSegments(
        this ReadOnlyMemory<char> value,
        ReadOnlySpan<char> separator,
        StringComparison comparisonType);
}

/// <summary>
/// Provides the ability to split a string into substrings based on a delimiter
/// without any additional heap allocations.
/// </summary>
public readonly struct StringSegments : IReadOnlyCollection<ReadOnlySequenceSegment<char>>
{
    /// <summary>
    /// Gets a value indicating whether the current instance is empty.
    /// </summary>
    public bool IsEmpty { get; }

    /// <summary>
    /// Gets the original string value.
    /// </summary>
    public ReadOnlyMemory<char> Original { get; }

    /// <summary>
    /// Gets the number of substrings.
    /// </summary>
    public int Count { get; }

    /// <summary>
    /// Gets the first substring.
    /// </summary>
    /// <exception cref="InvalidOperationException">Thrown when the current instance is empty.</exception>
    public ReadOnlySequenceSegment<char> First { get; }

    /// <summary>
    /// Returns an enumerator that iterates over the collection of substrings. 
    /// </summary> 
    public IEnumerator<ReadOnlySequenceSegment<char>> GetEnumerator();
}

Release Notes

  • v1.0.0 - Initial release
  • v1.0.1 - Added IReadOnlyList<> to StringSegments
  • v2.0.0 - Revert IReadOnlyList<> to IReadOnlyCollection<>
  • v2.0.1 - Updated readme
  • v2.0.2 - Exposing MemorySegment as public
  • v3.0.0 - Change StringSegments to be a struct and net8 upgrade
Product Compatible and additional computed target framework versions.
.NET net8.0 is compatible.  net8.0-android was computed.  net8.0-browser was computed.  net8.0-ios was computed.  net8.0-maccatalyst was computed.  net8.0-macos was computed.  net8.0-tvos was computed.  net8.0-windows was computed. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.
  • net8.0

    • No dependencies.

NuGet packages

This package is not used by any NuGet packages.

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last updated
3.0.0 103 6/13/2024
2.0.2 194 7/29/2023
2.0.1 186 7/24/2023
2.0.0 156 7/24/2023
1.0.1 184 7/24/2023
1.0.0 168 7/24/2023

Built on 2024-06-13 04:07:17Z