一个小项目中用到大量的字符串数组处理方法,包括增加、删除、筛选、替换、交集、并集等等方法。因为大都是使用数组的原型,效率当然是比较高的。现总结一下,希望能给用到的朋友带来一点方便。如果哪位朋友有更好的方法也希望能提出来跟大家分享,谢谢!
注:1、因项目需要,这些方法中大多返回的都是一个字符串,用分隔符隔开。
2、其中有些方法可以用正则表达式来实现(如删除、替换),效率会更高,但正好觉得这是一个系列,就用数组的方法实现了。
3、因阅读方便,下面使用了折叠的方式,但不方便拷贝,需要的朋友下载该文的源文件
/// <summary>
/// 判断第一个数组是否包含第二个数组的所有元素
/// </summary>
/// <param name="item1"></param>
/// <param name="item2"></param>
/// <returns></returns>


public static bool ContainsItem(string[] item1, string[] item2)


{
foreach(string s in item2)

{
if(!HasValue(item1, s))

{
return false;
}
}
return true;
}
/// <summary>
/// 剔除字符串数组中的重复元素,超过100,000条数据,效率可能会低
/// </summary>
/// <param name="item"></param>
/// <param name="separator"></param>
/// <returns></returns>


public static string DistinctItem(string[] item, string separator)


{
ArrayList al = new ArrayList();
StringBuilder sb = new StringBuilder();
foreach(string s in item)

{
if(s == string.Empty)

{
continue;
}
if(!al.Contains(s))

{
al.Add(s);
}
}
foreach(string s in al)

{
sb.Append(s);
sb.Append(separator);
}
string returnstr = sb.ToString();
returnstr = (returnstr.EndsWith(separator)) ? returnstr.Substring(0, returnstr.Length -1) : returnstr;
return returnstr;
}

/// <summary>
/// 判断两个数组是否相等
/// </summary>
/// <param name="item1"></param>
/// <param name="item2"></param>
/// <returns></returns>


public static bool EqualItem(string[] item1, string[] item2)


{
if(item1 == null || item2 == null)

{
return false;
}
if(item1.Length != item2.Length)

{
return false;
}
foreach(string s in item1)

{
if(!HasValue(item2, s))

{
return false;
}
}
return true;
}

/// <summary>
/// 判断一个字符串数组是否包含某个值
/// </summary>
/// <param name="item"></param>
/// <param name="sv"></param>
/// <returns></returns>


public static bool HasValue(string[] item, string sv)


{
if(item == null) return false;
foreach(string s in item)

{
if(s == sv)

{
return true;
}
}
return false;
}

/// <summary>
/// 在字符串数组中去掉一个值
/// </summary>
/// <param name="item"></param>
/// <param name="sv"></param>
/// <param name="separator"></param>
/// <returns>返回字符串的形式,separator分割符</returns>


public static string RemoveValue(string[] item, string sv, string separator)


{
if(item == null) return string.Empty;
StringBuilder sb = new StringBuilder();
foreach(string s in item)

{
if(s != sv)

{
sb.Append(s);
sb.Append(separator);
}
}
string returnstr = sb.ToString();
returnstr = (returnstr.EndsWith(separator)) ? returnstr.Substring(0, returnstr.Length -1) : returnstr;
return returnstr;
}

/// <summary>
/// 在字符串数组中添加一个值
/// </summary>
/// <param name="item"></param>
/// <param name="sv"></param>
/// <param name="separator"></param>
/// <returns>返回字符串的形式,separator分割符</returns>


public static string AddValue(string[] item, string sv, string separator)


{
if(item == null) return sv;
StringBuilder sb = new StringBuilder();
foreach(string s in item)

{
sb.Append(s);
sb.Append(separator);
}
sb.Append(sv);
return sb.ToString();
}

/// <summary>
/// 替换一个字符串数组中的某个值
/// </summary>
/// <param name="item"></param>
/// <param name="oldSv"></param>
/// <param name="newSv"></param>
/// <param name="separator"></param>
/// <returns>返回字符串的形式,separator分割符</returns>


public static string ReplaceValue(string[] item, string oldSv, string newSv, string separator)


{
if(item == null) return string.Empty;
StringBuilder sb = new StringBuilder();
foreach(string s in item)

{
if(s == oldSv)

{
sb.Append(newSv);
sb.Append(separator);
}
else

{
sb.Append(s);
sb.Append(separator);
}
}
string returnstr = sb.ToString();
returnstr = (returnstr.EndsWith(separator)) ? returnstr.Substring(0, returnstr.Length -1) : returnstr;
return returnstr;
}
/// <summary>
/// 取两个字符串数组的并集
/// </summary>
/// <param name="item1"></param>
/// <param name="item2"></param>
/// <param name="separator"></param>
/// <returns>返回字符串的形式,separator分割符</returns>


private static string UnionValue(string[] item1, string[] item2, string separator)


{
if(item1 == null || item2 == null) return string.Empty;
StringBuilder sb = new StringBuilder();
foreach(string s in item1)

{
sb.Append(s);
sb.Append(separator);
}
foreach(string s in item2)

{
if(HasValue(item1, s))

{
continue;
}
sb.Append(s);
sb.Append(separator);
}
string returnstr = sb.ToString();
returnstr = (returnstr.EndsWith(separator)) ? returnstr.Substring(0, returnstr.Length -1) : returnstr;
return returnstr;
}

/// <summary>
/// 取得两个字符串数组的差集,返回存在与item1而不存在于item2的值
/// </summary>
/// <param name="item1"></param>
/// <param name="item2"></param>
/// <returns>返回字符串的形式,separator分割符</returns>


public static string DiffValue(string[] item1, string[]item2, string separator)


{
StringBuilder sb = new StringBuilder();
foreach(string s in item1)

{
if(HasValue(item2, s))

{
continue;
}
sb.Append(s);
sb.Append(separator);
}
string returnstr = sb.ToString();
returnstr = (returnstr.EndsWith(separator)) ? returnstr.Substring(0, returnstr.Length -1) : returnstr;
return returnstr;
}