检查两个字符之间的特定字符

时间:2019-04-06 16:42:17

标签: c# string

为说明: 取输入字符串"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语句或循环? (除非确实没有别的方法,我真的不想使用正则表达式)

1 个答案:

答案 0 :(得分:3)

字符串是字符数组。循环浏览并检查字符。

for (int i = 2; i < someString.Length; i++) {
    if (someString[i] == charB && someString[i - 2] == charA) {
        //TODO: delete the char in between.
        break;
    }
}

如果您从索引= 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;
    }
}