c# - 检查两个字符之间的特定字符
问题描述
举例说明:取输入字符串"Yesterday I ate two bu rgers"
(有意空格)
我想检查输入字符串以查看" "
两个字符(在本例中)"u"
和"r"
. 如果它存在删除这个字符。
首先我想出了这个:
string someString = "Yesterday I ate two bu rgers";
string charA = 'u', charB = 'r';
if (someString.Contains(charA) &&
someString.Substring(someString.IndexOf(charA) + 1).Equals(" ") &&
someString.Substring(someString.IndexOf(charA) + 2).Equals(charB))
//delete the space
然而,这不仅感觉(并且看起来)效率低下,而且如果句子是“昨天你吃了两个汉堡”,它也会失败,因为它将采用第一个“u”的索引。所以我必须对多个实例进行额外检查charA
我想到的另一个解决方案是在每个空格上拆分句子,并查看拆分的最后一个字符是否匹配charA
,以及下一个拆分的第一个字符是否匹配charB
。如果它确实将两者结合在一起。
string[] splitString = someString.Split(null);
for (int i = 0; i < splitString.Length -1; i++)
{
string lastChar = splitString[i].Substring(splitString[i].Length - 1);
string firstChar = splitString[i + 1].Substring(0, 1);
if(lastChar.Equals(charA) && firstChar.Equals(charB))
{
string joined = splitString[i] + splitString[i + 1];
}
}
然而,这种方法也有缺陷,因为当输入中存在两个空格时它会中断。
有没有办法在不需要一堆 if 语句或循环的情况下做到这一点?(除非真的没有其他方法我真的不想使用正则表达式)
解决方案
字符串是一个字符数组。遍历它并检查字符。
for (int i = 2; i < someString.Length; i++) {
if (someString[i] == charB && someString[i - 2] == charA) {
//TODO: delete the char in between.
break;
}
}
如果您从 index = 2 开始并测试第二个字符,您可以简单地返回 2 个位置来检查第一个字符。
但当然你也可以像这样向前看:
for (int i = 0; i < someString.Length - 2; i++) {
if (someString[i] == charA && someString[i + 2] == charB) {
//TODO: delete the char in between.
break;
}
}
推荐阅读
- javascript - Toastr 用于表单验证
- python - Windows 使用 python 2.7 而不是 3.6
- php - 上传文件不再在公共网站上工作,但在本地工作?
- typescript - 是否可以将 `disableCSSOMInjection` 与 TypeScript 一起使用?
- javascript - JS 承诺或异步等待作为对象承诺返回
- swift - 在核心数据中使用索引来获取特定的二进制数据
- amazon-web-services - 长期使用 rds.DatabaseInstanceFromSnapshot 是否安全?
- dom - 为什么现代浏览器还没有使 DOM 数据流/状态驱动来支持现代 Web 应用程序*没有框架*
- python - 你如何在python中进行模糊分组?
- ruby-on-rails - 搜索踢问题 Faraday::Error::ConnectionFailed