重写了一些.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;
}
}