【问题标题】:How to find the index of the first char in a string that is not in a list如何在不在列表中的字符串中查找第一个字符的索引
【发布时间】:2008-11-19 00:30:20
【问题描述】:

我知道我可以遍历字符串或构建正则表达式或反转集合(毕竟 ASCII 并没有那么大)并搜索第一个实例,但是糟糕。

我正在寻找的是一个不错的单班轮。

功能越少越好,LINQ 已经出局(对我来说,别问了,这是一个漫长的故事)


我要采用的解决方案(除非我看到更好的解决方案)

static int FirstNotMeta(int i, string str)
{
    for(; i < str.Length; i++)
        switch(str[i])
        {
            case '\\':
            case '/':
            case '.':
                continue;
            default:
                return i;
        }
    return -1;
}

好吧,我作弊了,我提前知道我在乎什么char。

【问题讨论】:

  • 该应用程序需要在没有单声道的 Linux 上运行,所以我也在自动翻译成不需要单声道的语言。哦,男孩,我玩得很开心!真的,我是!
  • 应该说你想要索引而不是字符。

标签: c# string search


【解决方案1】:

这行得通:

public static char FindFirstNotAny(this string value, params char[] charset)
{
    return value.TrimStart(charset)[0];
}

【讨论】:

  • “nest”:一个词,描述在键盘上瞄准不好并认为某事很酷的情况
  • @BCS:我应该一直读到你定义的结尾!好东西!即..非常窝
  • 不错,没想到。确保在 0 处有一个字符。
【解决方案2】:

如果您无法访问 LINQ,我认为您可能只需要编写一个带循环的静态方法(无论如何这可能比 LINQ 更有效。请记住,编译器会尽可能内联小方法。

我能想到的最简单的非 LINQ 如下。我建议添加大括号,以便范围和块清晰:

public static char? GetFirstChar(string str, char[] list)
{
    foreach (char c in str) if (!list.Contains(c)) return c;
    return null;
}

使用 C# 3.0 和 LINQ:

char[] list = { 'A', 'B' };
string str = "AABAGAF";

char first = str.ToArray().Where(c => !list.Contains(c)).FirstOrDefault();

在这种情况下,如果没有非列表字符,则 first 将等于 0x0000(或 字符 为空)。你可以这样做:

char? first = str.ToArray().Cast<char?>().Where(
    c => !list.Contains(c.Value)).FirstOrDefault();

如果没有匹配项,则 first 将为 null。这也可以写成:

var query = from char c in str
            where !list.Contains(c)
            select (char?)c;
char? first = query.FirstOrDefault();

【讨论】:

    【解决方案3】:

    不是那么高效,但是:

    char f(string str, IEnumerable<char> list)
    {
      return str.ToCharArray().First(c => !list.Contains(c))
    }
    

    【讨论】:

    • 这不是返回第一个字符的值,而不是索引吗?
    【解决方案4】:

    这个 C/C++ 示例是否适合您:

    char *strToSearch = "This is the one liner you want"
    char *skipChars = "Tthise";
    size_f numToSkip = strcspn(strToSearch, skipChars);
    

    strcspn() 函数扫描字符串以查找指定集合的​​补码。它返回集合中包含字符的初始字符数。

    【讨论】:

    • 看来 strcspn 背后的代码才是我们所需要的……GPL 版本:google.com/…
    猜你喜欢
    • 2011-05-29
    • 2013-05-08
    • 1970-01-01
    • 2019-04-29
    • 1970-01-01
    • 2015-07-01
    • 2017-02-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多