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