C# 字符串分割

这是以前憋得无聊做的一个(string splite)分割文本重写的算法 当然这是很简单的 纯算法我也写过现在还在邮箱不过

那个算法大量数据跑不赢.Net自带的String::Split的确对我而言是个不小得打击 不过倒也不错。


1. strtock // 分割文本 _Str 欲被分割的文本 _Delim 欲被用于分割的文本

    该api貌似不能用了,智商捉急了

2: strstr // 寻找文本 _Str 欲被寻找的文本 _SubStr 欲被用于寻找的字符串

3: strlen // 取文本长度 _Str 欲被统计长度的字符串

using System;
using System.Collections.Generic;
using System.Runtime.InteropServices;

public static unsafe class _string
{

    [DllImport("msvcr80.dll", CallingConvention = CallingConvention.Cdecl)]
    [return: MarshalAs(UnmanagedType.LPStr)]
    public static extern string strtok(char* _Str, char* _Delim);

    [DllImport("ntdll.dll", CallingConvention = CallingConvention.Cdecl)]
    public static extern char* strstr(char* _Str, char* _SubStr);

    [DllImport("ntdll.dll", CallingConvention = CallingConvention.Cdecl)]
    public static extern uint strlen(char* _Str);

    public static string[] Split(string value, string delim) // strtok winapi function invalid. 文本分割
    {

        int offset, size;
        if (value != null && delim != null && (size = delim.Length) > 0) // Check string is valid.
        {
            fixed (char* _value = value.ToCharArray()) // Get string pointer.
            {
                fixed (char* _delim = delim)
                {
                    int[] items = IndexOfs(_value, _delim, size); 
                    string[] buffer = new string[items.Length + 0x1];
                    buffer[0] = new string(_value, 0, items[0x0]);
                    for (int i = 1; i < items.Length; i++) 
                    {
                        offset = items[i - 1] + size;
                        buffer[i] = new string(_value, offset, items[i] - offset);
                    }
                    offset = items.Length;
                    buffer[offset--] = new string(_value, items[offset] + 1, value.Length - (items[offset] + 1));
                    return buffer;
                }
            }
        }
        return new string[0];
    }

    public static int[] IndexOfs(char* str, char* search, int offset) // 寻找文本s
    {
        char* eax = str;
        List<int> items = new List<int>();
        while ((str = strstr(str, search)) != null)
        {
            int pos;
            if ((pos = (int)(str - eax)) < 0)
                break;
            str += offset;
            items.Add(pos);
        }
        return items.ToArray();
    }

    public static int IndexOf(char* str, char* search) // 寻找文本
    {
        char* ptr;
        if ((ptr = strstr(str, search)) != null)
            return (int)(ptr - str);
        return -1;
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
C#中,可以使用string.Split()方法对字符串进行分割。该方法的使用形式为:string[] result = originalString.Split(separatorChars, StringSplitOptions);其中,separatorChars是一个字符数组,表示分隔符;StringSplitOptions是一个枚举类型,表示是否移除空白项。例如,以下代码将一个字符串按照逗号进行分隔: string originalString = "apple,banana,orange"; string[] result = originalString.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries); foreach (string s in result) { Console.WriteLine(s); } // 输出: // apple // banana // orange 除了单个字符分隔符,还可以使用多个字符分隔符,例如以下代码将一个字符串按照逗号和空格两种分隔符进行分隔: string originalString = "apple, banana, orange"; string[] result = originalString.Split(new char[] { ',', ' ' }, StringSplitOptions.RemoveEmptyEntries); foreach (string s in result) { Console.WriteLine(s); } // 输出: // apple // banana // orange 需要注意的是,如果分隔符是一个字符串而不是一个字符,可以使用String.Split()方法的重载形式,例如以下代码将一个字符串按照换行符进行分隔: string content = "line1\nline2\nline3"; string[] getAry = content.Split(new string[] { "\n" }, StringSplitOptions.RemoveEmptyEntries); foreach (string s in getAry) { Console.WriteLine(s); } // 输出: // line1 // line2 // line3 --相关问题--: 1. C#中还有哪些常用的字符串操作方法? 2. 如何在C#中将字符串转换为数字类型? 3. C#中如何判断一个字符串
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值