在寫代碼中我們經常需要對字符串進行截取操作 ,因此把它們做成了通用方法。以便後續進行調用哦。。
/// <summary>
/// 擴展是否爲null, true爲null
/// </summary>
public static bool IsNullOrEmpty(this string s)
{
return string.IsNullOrEmpty(s);
}
/// <summary>
/// (截末)截取字符串,根據開始位置起查找,出現"開始字符"位置起到最後,是否忽略大小寫,是否包含開始字符
/// "房Chen華是個高手".SubToEndString("Chen",0,true,true)返回 陳華是個高手
/// </summary>
/// <param name="str">要 截取字符串</param>
/// <param name="startStr">匹配開始字符找到對應的開始截取的位置</param>
/// <param name="startIdx">開始位置即從什麼位置開始查找</param>
/// <param name="isContains">是否包含開始字符</param>
/// <param name="isIgnoreCase">是否忽略大小寫比較true爲不敏感,false爲敏感</param>
/// <returns>截取字符串</returns>
public static string SubToEndString(this string str, string startStr, int startIdx, bool isContains = false, bool isIgnoreCase = true)
{
if (str.IsNullOrEmpty() || startIdx > str.Length - 1 || startIdx < 0)
return string.Empty;
int idx = str.IndexOf(startStr, startIdx, isIgnoreCase ? StringComparison.OrdinalIgnoreCase : StringComparison.Ordinal);
if (idx < 0) //沒找到
return string.Empty;
return str.Substring(isContains ? idx : idx + startStr.Length);
}
/// <summary>
/// (截末)截取字符串,根據開始字符,是否包含開始字符,大小寫是否敏感(從0位置開始,),
/// "房陳huA是個高手".SubToEndString("HUA",true,true)返回 huA是個高手
/// </summary>
/// <param name="str">要 截取字符串</param>
/// <param name="startStr">開始字符</param>
/// <param name="isContains">是否包含開始字符</param>
/// <param name="isIgnoreCase">是否忽略大小寫比較</param>
/// <returns>截取字符串</returns>
public static string SubToEndString(this string str, string startStr, bool isContains = false, bool isIgnoreCase = true)
{
return str.SubToEndString(startStr, 0, isContains, isIgnoreCase);
}
/// <summary>
/// (截頭)截取字符串,從指定位置startIdx開始,出現"結束字符"位置之間的字符串,是否忽略大小寫,是否包含開始字符
/// "房陳華是個高手".StartSubString(0,"陳",true,true)返回 房陳
/// </summary>
/// <param name="str">要截取字符串</param>
/// <param name="startIdx">開始查找的序號</param>
/// <param name="endStr"></param>
/// <param name="isContainsint">是否包含開始字符</param>
/// <param name="isIgnoreCase"></param>
/// <returns>截取字符串</returns>
public static string StartSubString(this string str, int startIdx, string endStr, bool isContains = false, bool isIgnoreCase = true)
{
if (str.IsNullOrEmpty() || startIdx > str.Length - 1 || startIdx < 0)
return string.Empty;
int idx = str.IndexOf(endStr, startIdx, isIgnoreCase ? StringComparison.OrdinalIgnoreCase : StringComparison.Ordinal);
if (idx < 0) //沒找到
return string.Empty;
return str.Substring(0, isContains ? idx + endStr.Length : idx);
}
/// <summary>
/// (截頭)截取字符串,從0位置開始,出現"結束字符"位置之間的字符串, 忽略大小寫,是否包含開始字符
/// "Fang陳華是個高手".StartSubString("陳",true,"華")返回 陳華
/// </summary>
/// <param name="str">要 截取字符串</param>
/// <param name="endStr">開始字符</param>
/// <param name="isContains">是否包含開始字符</param>
/// <returns>截取字符串</returns>
public static string StartSubString(this string str, string endStr, bool isContains = false)
{
return str.StartSubString(0, endStr, isContains);
}
/// <summary>
/// (截中)截取字符串,根據開始字符,結束字符,是否包含開始字符,結束字符(默認爲不包括),大小寫是否敏感(從0位置開始,)
/// "Fang陳華是個高手".SubBetweenString("陳","手",true,true)返回 陳華是個高手
/// </summary>
/// <param name="str">要 截取字符串</param>
/// <param name="startStr">開始字符</param>
/// <param name="endstr">結束字符</param>
/// <param name="isContainsStartStr">是否包含開始字符</param>
/// <param name="isContainsEndStr">是否包含結束字符</param>
/// <param name="isIgnoreCase">是否忽略大小寫比較</param>
/// <returns>截取字符串</returns>
public static string SubBetweenString(this string str, string startStr, string endstr, bool isContainsStartStr = false, bool isContainsEndStr = false, bool isIgnoreCase = true)
{
if (str.IsNullOrEmpty())
return string.Empty;
int staridx = str.IndexOf(startStr, 0, isIgnoreCase ? StringComparison.OrdinalIgnoreCase : StringComparison.Ordinal);
if (staridx < 0) //沒找到
return string.Empty;
int endidx = str.IndexOf(endstr, staridx + startStr.Length, isIgnoreCase ? StringComparison.OrdinalIgnoreCase : StringComparison.Ordinal);
if (endidx < 0) //沒找到
return string.Empty;
var start = isContainsStartStr ? staridx : staridx + startStr.Length;
var end = isContainsEndStr ? endidx + endstr.Length : endidx;
if (end <= start)
return string.Empty;
return str.Substring(start, end - start);
}
/// <summary>
/// 反向截末——截取字符串,根據開始字符,開始搜索位置(反向的即右到左),是否忽略大小寫,
/// 是否包含開始字符
/// </summary>
/// <param name="str">要 截取字符串</param>
/// <param name="endStartStr">從後面開始匹配的字符串</param>
/// <param name="isContains">是否包含開始字符——默認爲不包括</param>
/// <param name="isIgnoreCase">是否忽略大小寫比較true爲不敏感,false爲敏感</param>
/// <returns>截取字符串</returns>
public static string LastSubEndString(this string str, string endStartStr, bool isContains = false, bool isIgnoreCase = true)
{
if (str.IsNullOrEmpty())
return string.Empty;
int idx = str.LastIndexOf(endStartStr, isIgnoreCase ? StringComparison.OrdinalIgnoreCase : StringComparison.Ordinal);
if (idx < 0) //沒找到
return string.Empty;
return str.Substring(isContains ? idx : idx + endStartStr.Length);
}
/// <summary>
/// 反向截取中間——截取字符串,根據開始字符,開始搜索位置(反向的即右到左),是否忽略大小寫,
/// </summary>
/// <param name="str">要截取字符串</param>
/// <param name="endStartStr">從後面開始匹配的字符串</param>
/// <param name="endEndStr">結束字符</param>
/// <param name="isContainsendStartStr">是否包含開始字符--默認不包括</param>
/// <param name="isContainsEndEndStr">是否包含結束字符--默認不包括</param>
/// <param name="isIgnoreCase">是否忽略大小寫比較true爲不敏感,false爲敏感</param>
/// <returns>返回截得字符串</returns>
public static string LastBetweenString(this string str, string endStartStr, string endEndStr, bool isContainsendStartStr = false, bool isContainsEndEndStr = false, bool isIgnoreCase = true)
{
if (str.IsNullOrEmpty())
return string.Empty;
int endidx = str.LastIndexOf(endEndStr, isIgnoreCase ? StringComparison.OrdinalIgnoreCase : StringComparison.Ordinal);
if (endidx < 0) //沒找到
return string.Empty;
int staridx = str.Substring(0, endidx).LastIndexOf(endStartStr, endidx, isIgnoreCase ? StringComparison.OrdinalIgnoreCase : StringComparison.Ordinal);
if (staridx < 0) //沒找到
return string.Empty;
var start = isContainsendStartStr ? staridx : staridx + endStartStr.Length;
var end = isContainsEndEndStr ? endidx + endEndStr.Length : endidx;
if (end <= start)
return string.Empty;
return str.Substring(start, end - start);
}