首页 > 解决方案 > 检查两个字符之间的特定字符

问题描述

举例说明:取输入字符串"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 语句或循环的情况下做到这一点?(除非真的没有其他方法我真的不想使用正则表达式)

标签: c#string

解决方案


字符串是一个字符数组。遍历它并检查字符。

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

推荐阅读