我似乎找不到解决这个问题的好方法。我有一系列字符串,这些字符串是从我收到的有关设备丢失或被盗的报告中输入的。我在表单的其余部分中一直使用 string.IndexOf 函数,并且效果很好。此问题与显示设备是否丢失或被盗的字段有关。
示例:
"Lost or Stolen? Lost"
"Lost or Stolen? Stolen"
我需要能够阅读此内容,但是当我执行string.IndexOf(@"Lost")
时,它总是会返回丢失,因为它在问题中。
不幸的是,我无法以任何方式更改表单本身,并且由于提交方式的性质,我不能只编写代码来删除字符串中的前 15 个左右的字符,因为这可能太少了在某些情况下。
我真的很喜欢 C# 中的一些东西,它允许我在找到第一个结果后继续搜索字符串,以便逻辑如下所示:
string my_string = "Lost or Stolen? Stolen";
searchFor(@"Stolen" in my_string)
{
Found Stolen;
Does it have "or " infront of it? yes;
ignore and keep searching;
Found Stolen again;
return "Equipment stolen";
}
最佳答案
这里有几个选项。您可以查找空格的最后一个索引并获取字符串的其余部分:
string input = "Lost or Stolen? Stolen";
int lastSpaceIndex = input.LastIndexOf(' ');
string result = input.Substring(lastSpaceIndex + 1);
Console.WriteLine(result);
或者您可以将其拆分并取最后一个单词:
string input = "Lost or Stolen? Lost";
string result = input.Split(' ').Last();
Console.WriteLine(result);
正则表达式也是一种选择,但考虑到上面的更简单的解决方案,就有点过分了。适合这种情况的一个不错的快捷方式是使用 RegexOptions.RightToLeft
选项来获取从右侧开始的第一个匹配项:
string result = Regex.Match(input, @"\w+", RegexOptions.RightToLeft).Value;
关于C# - 搜索字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9932199/