/// <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);
}