【问题标题】:Is there any way to compare strings with a startIndex?有什么方法可以将字符串与 startIndex 进行比较?
【发布时间】:2020-10-10 22:59:02
【问题描述】:

我只是想知道是否有一种方法可以将 c# 字符串与第一个字符串的 startIndex 进行比较。我有一个长字符串和一个索引,想知道下一个字符是否等于一个字符串。我发现这样做的唯一方法是:

public static bool Equals (string longString, int index, string compare) => longString.Substring(index, compare.Length) == compare;

我认为这是低效的,因为每次比较索引处的新字符串时都不必要地创建子字符串。有没有更有效的方法?我查看了 string.Equals,但它看起来不像是我愿意尝试重写的东西。

【问题讨论】:

  • Srings 是 indexed,因此您可以在循环中比较这些位置的字符,像访问数组一样访问它们。
  • 你不需要循环,看下面我的回答
  • 如果longString = "text containing"; index = 5;compare = "Contain"; 的预期结果是什么?请注意大写的“C”和(!)“包含”在技术上与“包含”是一个不同的词。
  • 示例代码中有错别字。你应该用compare.Length + index替换compare.Length

标签: c# string substring


【解决方案1】:

IndexOf() 包含一个重载,我们可以设置startIndex 并检查字符串是否包含所需的单词,然后我们应该检查startIndex 之后的子字符串是否与所需的单词长度相同,并注意以下解决方案根本不会创建新的子字符串:

var startIndex = 2;
var longString = "56789";
var wordToFind = "789";
var isEqual = longString.IndexOf(wordToFind, startIndex) != -1 && wordToFind.Length == (longString.Length - startIndex);
Console.WriteLine(isEqual);

【讨论】:

  • 使用内置函数是最好的选择,因为在 BCL 中对字符串查找进行了疯狂优化,而自定义重新实现通常会更糟。
  • OP 想知道以longString 的索引index 开始并以longString 的索引结束的子字符串是否完全等于compare,不包含compare
  • @Pautodidactic 上面的代码完全满足OP和你的要求。如果您将某些字符编辑为大写,那么它将返回false。你可以测试一下。
  • startIndex 在您的示例中为 10。所以 OP 正在寻找的子字符串是"long string desired string""long string desired string" 是否等于 "desired string"?您的示例返回 true 因为它检查 "long string desired string" 是否包含 "desired string"' 而这不是 OP 想要的。如果我错了,请告诉我。
  • 我觉得你应该把longString.Length - 1中的1改成startIndex
【解决方案2】:

这是我找到的最佳解决方案。

public static bool Equals (string longString, int index, string compare)
{
    if (longString.Length > (index + compare.Length))
        return false;
    for (int n = 0; n < compare.Length; n++)
    {
        if (longString[index + n] != compare[n])
            return false;
    }
    return true;
}

【讨论】:

  • 您需要进行额外检查以确保index + n 仍在longString 的范围内。
猜你喜欢
  • 1970-01-01
  • 2013-07-28
  • 2014-09-03
  • 1970-01-01
  • 1970-01-01
  • 2020-06-08
  • 1970-01-01
  • 2012-10-06
  • 2019-01-22
相关资源
最近更新 更多