在字符串中查找包含的字符串并获取它';s的结束索引值

本文关键字:字符串 索引值 结束 串并 查找 包含 字符 获取 | 更新日期: 2023-09-27 18:25:39

我试图在字符串中存储未知数量的特定字符串,但我想获取它的索引,以便再次检查它。例如:

List<string> values = new List<string>();
int num;
string line = "/hello/1 /a/sdhdkd asjs /hello/2 ajhsd asjskjd skj /hello/s sajdk /hello/3 assdsfd hello/4";

我想存储:/hello/1/hello/2/hello/3/hello/4,但不是hello/s,因为它在字符串列表中是不同的模式(不是数字),但我不知道如何。。。

我想的是:

//检测它们之间的共同模式

if(line.Contains("/hello/")

我如何知道在"/hello/"中找到的最后一个"/"的位置(在line中是line[6]),所以我可以这样做:if(int.TryParse(line[7], num))

如果这个TryParse返回true,它将存储values.Add("/hello/"+line[7]);"/"后的值不会高于9或负值(例如:/hello/34或/hello/-23)

然后一个辅助字符串就是这个之后的内容:

string aux = "";
for(int i=index_value; i<line.Length; i++) aux+= line[i]; //Where index_value would be 7+1
line = aux;

所以现在,行是:

" /a/sdhdkd asjs /hello/2 ajhsd asjskjd skj /hello/s sajdk /hello/3 assdsfd hello/4";

我会再次进行搜索,但我缺少的是如何获得索引值,所以下次进行搜索时,我的行将是:

" ajhsd asjskjd skj /hello/s sajdk /hello/3 assdsfd hello/4";

在找到并保存"/hello/2"

在字符串中查找包含的字符串并获取它';s的结束索引值

之后

这看起来是一个使用正则表达式的好地方(我不经常这么说)。例如:

using System;
using System.Text.RegularExpressions;
class Program
{
    static void Main(string[] args)
    {
        var regex = new Regex(@"/hello/'d+'b");
        var text = "/hello/1 /a/sdhdkd asjs /hello/2 ajhsd " 
            + "asjskjd skj /hello/s sajdk /hello/3 assdsfd hello/4";
        foreach (Match match in regex.Matches(text))
        {
            Console.WriteLine("{0} at {1}", match.Value, match.Index);
        }
    }
}

输出:

/hello/1 at 0
/hello/2 at 24
/hello/3 at 66

(没有hello/4,因为它没有前导斜杠。)

如果hello不应该是硬编码的,可以使用new Regex(@"/'w+/'d+'b")或类似的东西来允许段塞中的所有单词字符。

方法略有不同。看看这是否有帮助-

string line = "/hello/1 /a/sdhdkd asjs /hello/2 ajhsd asjskjd skj /hello/s sajdk /hello/3 ";
string[] lineParts = line.Split(' ');
int helloPartIndex;
int helloSuffix;
foreach (string linePart in lineParts)
{
      if (linePart.StartsWith("/hello/"))
      {
           helloPartIndex = line.IndexOf(linePart); //This is the index of the part in the entire line
           string[] helloParts = linePart.Split('/');
           if(helloParts != null && helloParts.Length >0)
           if (int.TryParse(helloParts[2], out helloSuffix))
           {
                  // Do stuff when the hello suffix is integer
           }
           else
           {
                 // This is where you have to deal with /hello/s and so on
           }
      }
}

您希望使用String.IndexOf (String, Int32)而不是Contains(),因为它可以从特定索引开始获得"Hello/"的索引。这个想法是跟踪当前的指数,并逐步推进。

void Main()
{   
    var line = @"/hello/1 /a/sdhdkd asjs /hello/2 ajhsd 
               asjskjd sk /hello/s sajdk /hello/3 assdsfd hello/4";
    var searchString = "/hello/";
    var index = 0;
    var values = new List<int>();
    while(index < line.Length && 
         (index = line.IndexOf(searchString, index)) != -1)
    {
        index += searchString.Length;
        if(index < line.Length &&
           Char.IsDigit(line[index]))
            values.Add((int)(line[index] - '0'));
    }   
    Console.WriteLine(values);
}