首页 > 解决方案 > C# 定位 * 在由管道分隔的字符串中的位置

问题描述

我必须找到一个 * 在它可能根本没有的位置,第一个位置 | 第二名 | 第 3 位。

位置由管道分隔 |
因此

没有 * 通配符将是

`ABC|DEF|GHI` 

然而,虽然这可能是 1 种情况,但其他 3 种情况是

    string testPosition1 = "*|DEF|GHI";
    string testPosition2 = "ABC|*|GHI";
    string testPosition3 = "ABC|DEF|*";

我收集到的不是我应该使用 IndexOf ,但似乎我应该合并 | (管道)知道位置(不仅仅是长度,因为这三个地方的值可能是长的或短的。所以我只想知道 * 是在第一、第二还是第三位置(或者根本没有)

因此我正在这样做,但我不知道它是在第一个还是第二个管道之前

if(testPosition1.IndexOf("*") > 0) 
{
    // Look for pipes?  
}

标签: c#indexof

解决方案


有很多方法可以解决这个问题。最易读的可能实际上只是以困难的方式进行(即扫描字符串以找到第一个'*'字符,跟踪您在此过程中'|'看到的字符数)。

也就是说,这可能是类似的可读性和更简洁的:

int wildcardPosition = Array.IndexOf(testPosition1.Split('|'), "*");

如果未找到,则返回-1,否则返回从 0 开始的索引,用于分隔字符串的哪个段'|'包含通配符字符串。

这仅在通配符恰好是单字符字符串时才有效"*"。如果您需要支持其他变体,您仍然需要拆分字符串,但是您可以循环遍历数组以查找您需要的任何标准。


推荐阅读