判断一个长字符串,是否含有一个短的字符串

本文通过一个具体的代码案例探讨了为何大部分程序员难以成长为架构师。该案例展示了错误的字符串搜索实现方式,并指出了其中的问题。

不多说直接上代码

例如:

public static boolean isHave(String strs, String s) {
		for (int i = 0; i < strs.length(); i++) {
			if (strs.indexOf(s) != -1) {
				return true;
			}
		}
		return false;
	}


假设:

String strs = abdc fsad fa fs   123  dahflsa  ;

如果:

String s = 123;

结果返回true;

如果:

String s = 456;

结果返回false;

转载于:https://my.oschina.net/MStart/blog/515988

<think>嗯,用户问的是如何在C#中判断字符串是否包含某个字符。我需要根据提供的引用内容来整理答案。首先,引用[1]提到了Contains()方法,这个方法可以检查字符串是否包含字符串,但用户问的是字符,可能需要稍微调整。引用[2]和[3]讨论了检查中文字符的方法,其中用到了遍历字符和正则表达式,这可能适用于单个字符的情况。引用[4]再次提到Contains方法,但同样针对子字符串。 所以,用户的问题是关于单个字符的,而Contains方法只能处理子字符串能直接检查单个字符。因此,需要给出同的方法。比如,可以使用IndexOf方法检查字符是否存在,或者遍历每个字符,或者用LINQ的Any方法。此外,正则表达式也是一个选项,比如用Regex.IsMatch来匹配字符。 需要确认这些方法是否适用于单个字符。例如,IndexOf(char)返回索引,如果找到返回-1。遍历每个字符逐个比较,或者用Any(c => c == targetChar)会更直接。正则表达式的话,可以转义特殊字符,避免出错。 另外,用户可能需要区分大小写,所以要注意是否要使用忽略大小写的比较。例如,IndexOf有重载方法可以指定StringComparison参数,比如OrdinalIgnoreCase。但如果是单个字符,可能用char.ToLower或ToUpper来处理。 总结下来,回答应该包括:1. Contains方法(针对子字符串),但用户可能误用了“字符”这个词,所以需要说明;2. IndexOf方法检查字符是否存在;3. 遍历字符逐个比较;4. LINQ的Any方法;5. 正则表达式。同时要给出示例代码,并注意大小写处理的情况。 还需要检查是否有其他方法,比如使用LINQ的Contains方法,但System.Linq的Enumerable.Contains需要集合,所以可能得用Any更合适。或者用String.Contains的扩展方法,但可能需要转换字符为字符串。 然后,根据引用中的内容,引用[1]和[4]提到了Contains方法处理子字符串,而用户的问题可能包含这种情况,所以需要分情况讨论:如果检查的是子字符串,用Contains;如果是单个字符,用其他方法。 可能用户混淆了字符和子字符串,所以回答中需要明确区分这两种情况,并提供相应的解决方案。例如,用户的问题是关于字符,但给出的引用中有子字符串的方法,需要明确指出两者的同。 最后,生成相关问题,比如如何检查多个字符、忽略大小写、性能比较等,帮助用户扩展了解。</think>在C#中判断字符串是否包含特定字符或子字符串,可以通过以下5种方法实现: ### 一、Contains方法(子字符串判断) 若需判断是否包含**子字符串**,使用`Contains()`最简洁: ```csharp string mainStr = "Hello 你好"; string subStr = "ello"; bool result = mainStr.Contains(subStr); // 返回true[^1][^4] ``` ### 二、IndexOf方法(字符定位) 若需判断是否包含**单个字符**,推荐使用`IndexOf`: ```csharp char targetChar = '你'; int index = mainStr.IndexOf(targetChar); bool contains = (index != -1); // 返回true[^1] ``` ### 三、遍历检查(精准控制) 逐字符遍历适用于需要额外处理逻辑的场景: ```csharp foreach (char c in mainStr) { if (c == targetChar) { return true; } } ``` ### 四、LINQ方法(简洁语法) 使用`System.Linq`命名空间的`Any()`方法: ```csharp using System.Linq; bool contains = mainStr.Any(c => c == targetChar); ``` ### 五、正则表达式(模式匹配) 通过正则表达式实现复杂匹配逻辑: ```csharp using System.Text.RegularExpressions; bool contains = Regex.IsMatch(mainStr, Regex.Escape(targetChar.ToString())); ``` ### 六、大小写敏感控制 若需忽略大小写: ```csharp // Contains方法直接支持,需转换格式 bool contains = mainStr.IndexOf(targetChar, StringComparison.OrdinalIgnoreCase) != -1; // 正则表达式方式 bool contains = Regex.IsMatch(mainStr, targetChar.ToString(), RegexOptions.IgnoreCase); ``` ### 性能对比表 | 方法 | 适用场景 | 时间复杂度 | 内存分配 | |-----------------|--------------|------------|----------| | Contains() | 子字符串查询 | O(n) | 低 | | IndexOf(char) | 单字符查询 | O(n) | 最低 | | 遍历检查 | 需要中断检查 | O(n) | 无 | | LINQ Any() | 代码简洁 | O(n) | 低 | | 正则表达式 | 复杂模式匹配 | O(n)~O(mn) | 较高 |
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值