C# 字符串操作

重写了一些.Net String提供的函数的功能 不过命名并不代表完全一样哦。

_find = 寻找文本

_rfind  倒找文本

_split  分割文本

_substr  取子字符串

_sub_replace  替换子文本

_replace  替换文本

_add strcat 链接字符串

_pad_left 左填充文本

_pad_right 右填充文本

_remove 删除字符串

_c_str 到C字符串

_data 到C+字符串

_size 取文本尺寸

_contains 文本是否存在

_equals 文本是否相同

using System;
using System.Collections.Generic;

public static class c_str
{
    public static int _find(this string str, string value)
    {
        return _find(str, value, 0);
    }

    public static int _find(this string str, string value, int index)
    {
        if (str != null && value != null)
        {
            int i = index, len = str.Length, size = value.Length;
            if (i > -1 && len > 0 && size > 0)
                while (i < len)
                {
                    int j = 0;
                    if (i + size > len)
                        break;
                    while (j < size)
                    {
                        if (str[i + j] != value[j])
                            break;
                        j++;
                    }
                    if (j == size)
                        return i;
                    i++;
                }
        }
        return -1;
    }

    public static int _rfind(this string str, string value)
    {
        if (str != null && value != null)
        {
            int len = str.Length;
            int size = value.Length;
            if (len > 0 && size > 0)
            {
                int i = len - size;
                while (i > -1)
                {
                    int j = size - 1;
                    while (j > -1)
                    {
                        if (str[i + j] != value[j])
                            break;
                        j--;
                    }
                    if (j < 0)
                        return i;
                    i--;
                }
            }
        }
        return -1;
    }

    public static string[] _split(this string str, string value)
    {
        IList<int> finds = new List<int>();
        int[] size = { str.Length, value.Length };
        int i = _find(str, value, 0);
        while (i > -1)
        {
            finds.Add(i);
            i = _find(str, value, i + size[1]);
        }
        size[1] = finds.Count;
        bool begin = false, end = false;
        if (size[1] > 0)
        {
            int min = size[1] - 1;
            if (finds[min] < size[0])
            {
                end = true;
                size[1]++;
            }
            if (finds[0] > 0)
            {
                begin = true;
                size[1]++;
            }
        }
        int len = finds.Count; // strtok
        string[] buffer = new string[size[1]];
        if (len > 0)
        {
            int x, y; len--;
            for (i = 0; i <= len; i++)
            {
                int j = i;
                x = finds[i];
                if (i >= len && end)
                    j++;
                if (begin && end || begin)
                    j++;
                y = i < len ? finds[i + 1] : y = x;
                buffer[j] = _substr(str, x + 1, y);
            }
            if (end)
            {
                i = size[1] - 2;
                x = finds[len] + 1; y = size[0];
                buffer[i] = _substr(str, x, y);
            }
            if (begin)
            {
                x = 0; i = len + 1; y = finds[0];
                buffer[0] = _substr(str, x, y);
            }
        }
        return buffer;
    }

    public static string _substr(string str, int start, int end)
    {
        if (str != null && str != string.Empty)
        {
            int len = str.Length;
            if (end > len || start > len)
                return string.Empty;
            if (start > end || start < 0 || end < 0)
                return string.Empty;
            char[] buffer = new char[end - start];
            for (int i = start; i < end; i++)
                buffer[i - start] = str[i];
            return new string(buffer);
        }
        return string.Empty;
    }

    public static string _add(this string str, string value)
    {
        if (str == null || str == string.Empty)
            return value;
        if (value == null || value == string.Empty)
            return str;
        int len = str.Length, size = value.Length;
        char[] buffer = new char[len + size];
        for (int i = 0; i < len; i++)
            buffer[i] = str[i];
        for (int i = 0; i < size; i++)
        {
            int j = i + len;
            buffer[j] = value[i];
        }
        return new string(buffer);
    }

    public static string _replace(this string str, string oldValue, string newValue)
    {
        if (str == null || oldValue == null)
            return str;
        int i = _find(str, oldValue);
        if ((i ) > (-1))
        {
            int len = str.Length;
            string beige = _substr(str, 0, i);
            string end = _substr(str, ++i, len);
            str = _add(beige, newValue);
            str = _add(str, end);
        }
        return str;
    }

    public static string _sub_replace(this string str, string oldValue, string newValue)
    {
        int i = -1;
        while ((i = _find(str, oldValue)) > -1)
            str = _replace(str, oldValue, newValue);
        return str;
    }

    public static string _pad_left(this string str, int totalWidth, char paddingValue)
    {
        return _add(new string(paddingValue, totalWidth), str);
    }

    public static string _pad_right(this string str, int totalWidth, char paddingValue)
    {
        return _add(str, new string(paddingValue, totalWidth));
    }

    public static string _pad_left(this string str, int totalWidth)
    {
        return _pad_left(str, totalWidth, (char)32);
    }

    public static string _pad_right(this string str, int totalWidth)
    {
        return _pad_right(str, totalWidth, (char)32);
    }

    public static string _remove(this string str, int startIndex, int count)
    {
        if (str != null && str != string.Empty)
        {
            if (startIndex < 0)
                startIndex = str.Length + startIndex;
            string beige = _substr(str, 0, startIndex);
            int x = startIndex + count;
            int y = str.Length;
            string end = _substr(str, x, y);
            return _add(beige, end);
        }
        return string.Empty;
    }

    public static string _remove(this string str, int startIndex)
    {
        if (str != null && str != string.Empty)
        {
            int len = str.Length - startIndex;
            return _remove(str, startIndex, len);
        }
        return string.Empty;
    }

    public static char[] _data(this string str)
    {
        int len = str != null ? str.Length : 0;
        char[] buffer = new char[len];
        for (int i = 0; i < len; i++)
            buffer[i] = str[i];
        return buffer;
    }

    public static char[] _c_str(this string str)
    {
        int len = str != null ? str.Length : 0;
        char[] buffer = new char[len + 1];
        for (int i = 0; i < len; i++)
            buffer[i] = str[i];
        return buffer;
    }

    public static int _size(this string str)
    {
        if (str != null && str != string.Empty)
            return str.Length;
        return 0;
    }

    public static bool _contains(this string str, string value)
    {
        return _find(str, value) > -1;
    }

    public static bool _equals(this string str, object obj)
    {
        if (str != null && obj != null)
            return str.GetHashCode() == obj.GetHashCode();
        return false;
    }

    public static bool _equals(this string str, string value)
    {
        if (str != null && value != null)
        {
            int x = 0, y = 0;
            int len = str.Length;
            for (int i = 0; i < len; i++)
                x ^= str[i];
            len = value.Length;
            for (int i = 0; i < len; i++)
                y ^= value[i];
            return x == y;
        }
        return false;
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值