根据第一个单词在数组中查找字符串

本文关键字:查找 字符串 数组 第一个 单词 | 更新日期: 2023-09-27 18:09:15

我试图过滤出基于2个关键字的数组,必须按顺序,到目前为止,我已经得到了这个:

string[] matchedOne = Array.FindAll(converList, s => s.Contains(split[1]));
string[] matchedTwo = Array.FindAll(matchedOne, s => s.Contains(split[2]));
if (matchedTwo.Length == 0)
{
    Console.Clear();
    Console.WriteLine("Sorry, Your Conversion is invalid");
    Main();
}

converlist =

,
28.0克,盎司,假的,28.0 -假的我添加的例子
克,盎司,3.0 -假的我添加的例子
16.0磅,盎司,
磅,0.454公斤,
品脱,升,0.568
英寸,厘米,2.5
英里,英寸,63360.0

如果用户输入5,盎司,克,当传递"matchedOne"时,它会找到;"一次,克,28.0"answers"盎司,假,28.0"。而不是现在的"磅,盎司,16.0"answers"克,盎司,3.0"。

那么在"matchedTwo"中它只会找到"once,gram,28.0"而不是"gram,ounce,3.0"

——只是补充一句:我不能使用超过"system;"的任何东西。

根据第一个单词在数组中查找字符串

var regex = new Regex(
      string.Format("^.*{0}.*{1}.*$",
      Regex.Escape(split[1]), Regex.Escape(split[2])),
      RegexOptions.IgnoreCase
      | RegexOptions.Multiline
      | RegexOptions.CultureInvariant
      | RegexOptions.IgnorePatternWhitespace
      | RegexOptions.Compiled
    );
Match m = regex.Match(converlist);

基本上就是匹配split[1]split[2]之前的那一行

或不带regex

string[] match = Array.FindAll(matchedOne, s => s.IndexOf(split[1])==-1?false: s.IndexOf(split[2], s.IndexOf(split[1])) != -1);

和工作转换…

const string converlist = "ounce,gram,28.0'r'nounce,fake,28.0'r'ngram, ounce, 3.0'r'npound,ounce,16.0'r'npound,kilogram,0.454'r'npint,litre,0.568'r'ninch, centimetre,2.5'r'nmile,inch,63360.0'r'n";
var split = "5,ounce,gram".Split(new[] { ',' });
var list = converlist.Split(new[]{"'r'n"}, StringSplitOptions.RemoveEmptyEntries).ToList();
var matches = list.FindAll(s =>  s.IndexOf(split[1])==-1?false: s.IndexOf(split[2], s.IndexOf(split[1])) != -1);
var conversionLine = matches[0];
Console.WriteLine(conversionLine);
var conversionFactor = decimal.Parse(conversionLine.Split(new[] { ',' })[2]);
var valueToConvert = decimal.Parse(split[0].Trim());
Console.WriteLine(string.Format("{0} {2}s is {1} {3}s", valueToConvert, conversionFactor * valueToConvert, split[1], split[2]));

以上答案满足你的需要,不过,这也可以。

string[] s = { "ounce,gram", "gram,ounce", "pound,carret" };
foreach (string temp in s.Where(x => (x.IndexOf("ounce")>-1) && (x.IndexOf("ounce") < x.IndexOf("gram"))))
            Debug.WriteLine(temp);