我正在尝试在字符串中存储未知数量的特定字符串,但我想获取它的索引,以便我可以再次检查它。例如:
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]
中),所以我可以这样做:{{1} }
如果此TryParse返回true,则会存储if(int.TryParse(line[7], num))
“/”后面的值不会高于9或负数(例如:/ hello / 34或/ hello / -23)
然后一个辅助字符串将是这样的:
values.Add("/hello/"+line[7]);
现在,行是:
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";
找到并保存“/ hello / 2”
答案 0 :(得分:0)
这看起来像是一个使用正则表达式的好地方(而且这不是我经常说的)。例如:
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")
或类似内容来允许该段中的所有单词字符。
答案 1 :(得分:0)
略有不同的方法。看看这是否有帮助 -
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
}
}
}
答案 2 :(得分:0)
而不是Contains()
,您希望使用String.IndexOf (String, Int32)
,因为它可以从特定索引开始获取“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);
}