C# 截取字符串

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

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值