【问题标题】:How to find a pair of chars within a string in c# netMF?如何在 c# netMF 中的字符串中找到一对字符?
【发布时间】:2014-08-27 08:31:29
【问题描述】:

这可能(在某处)以前被问过,但找不到任何文档(我已经看过了!)。

假设我声明了一个字符串,如:

String Test = "abcdefg";

我将如何搜索字符串以查看是否可以通过成对搜索字符串在字符串中的任何位置看到“cd”,例如:

{ab}{bc}{cd}{de}{ef}{fg}

也就是说,如果我将每个值分开,然后搜索一对相邻的字符?有内置函数吗?

我曾考虑过为此使用 char 数组,但它似乎(逻辑上)非常“重”/“慢”。有没有更好的办法来搜索这个字符串?

编辑 1

一旦我看到这个“cd”,我就需要在那个位置doSomething()(我已经使用substring 方法实现了。

【问题讨论】:

  • String.Contains 你在找什么?如bool result = Test.Contains("cd");.
  • 很遗憾,我不认为 string.Contains 在 netMF 中可用?
  • 哇。我很惊讶。然后使用Test.IndexOf("cd") >= 0
  • @mikez,这会告诉我它在那里,但不是它在哪里(对不起,它回答了这个问题,但我只是不擅长解释我在搜索中做了什么):(

标签: c# string search .net-micro-framework


【解决方案1】:

试试这个。

String.IndexOf(...) != -1

欲了解更多信息,read here.

【讨论】:

  • 这会告诉我它在那里,但我也需要找到它的位置:(
  • @jbutler483 阅读 neo 发布的链接,它确实为您提供了它的位置。他正在测试-1,因为如果没有位置(即它不存在),那将返回。 +1 仅用于此处的正确答案。
  • 哦,好吧 - 我只是认为这是一个“1”或“-1”的结果。对不起@neo!
  • @DeeMac 你能解释一下如果有多个结果会发生什么吗?这会给出第一个索引吗?
  • msdn.microsoft.com/en-us/library/… "Reports the zero-based index of the FIRST occurrence..." 别偷懒了。
【解决方案2】:

类似于 Neo 的答案,但在循环中获取字符串中的所有实例:

string Test = "abcdefgcd";
int index = Test.IndexOf("cd");

while (index > -1)
{
    //DoSomething();
    index = Test.IndexOf("cd", ++index);
}

第一个 IndexOf 检查是否存在您想要的内容,而第二个 IndexOf(在循环中)检查在最后一个索引之后 是否匹配。

在上面我们找到两个匹配项,然后循环结束。

【讨论】:

  • 请注意,我假设 .NETMF 类似于 .NETCF,因为它的框架支持也受到限制,但核心功能通常可用(from MSDN)
【解决方案3】:

没有内置函数可以做到这一点。 有一个 for 循环应该做你想做的事。

类似的东西:

string str = string.empty;

for (i=0;i<ch.length;i++) {

  if (i != ch.length) {
     str += ch[i] + ch[i+1];
  }
}

您也可以使用正则表达式,但这也不会很快。

为了大规模优化这一点,您可以实现字节移位。

【讨论】:

    【解决方案4】:

    您的字符串字符的 ASCII 代码在这种情况下是您的朋友,下面的完整工作示例

            var yourString = "abcdefg";
    
            var x = '\0';
    
            for (var i = 0; i < yourString.Length; i++)
            {
    
                //check whether i+1 index is not out of range
                if (i + 1 != yourString.Length)
                {
                    var test = yourString[i + 1];
                    x = yourString[i];
    
                    if(x.ToString() + test.ToString() == "cd")
                    {
                       Console.Write("Found at position " + i)
                    }
    
                }
            }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-03-14
      • 1970-01-01
      • 2022-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多