0

我有 ac# web 服务,它接受String输入并检查输入与充满Strings.

它的工作原理如下,假设我在输入中输入“澳大利亚”,服务将返回"Australia"。但是,如果我还输入 Aus(或 aus,目前使其不区分大小写),它也应该返回"Australia".

另一方面,如果我输入“tra”,它不应该返回澳大利亚,只有它们的前 3 个索引是“tra”的字符串。(如果是Ch,它应该返回中国,乍得......等)

目前我的代码看起来像

 public String countryCode(String input)
    {
        StringBuilder strings = new StringBuilder("", 10000);
        String text = System.IO.File.ReadAllText(Server.MapPath("countryCodes.txt"));
        String[] countries = Regex.Split(text, "#");


        int v;
        for (v = 0; v < countries.Length; v++)
        {
            if (countries[v].ToUpper().Contains(input) || countries[v].ToLower().Contains(input))
            {
                bool c = countries[v].ToUpper().Contains(input);
                bool b = countries[v].ToLower().Contains(input);
                if (b == true || c == true)
                {
                        strings.Append(countries[v] + " ");
                  }



                else
                {
                    strings.Append("Country not found");
                    break;
                }

            }



        }
        String str = strings.ToString();
        return str;
    }

这是一个开始,但我真的很难比较字符串的索引。

我的问题是如何构造一些东西来检查countries[v][0]vs input[0],如果它相同,然后检查[1]and [1],依此类推,直到它们不一样或被input.Length超过然后返回适当的值?

如果需要,请发表评论以获得澄清

问候

4

1 回答 1

2

我认为您的循环可以简化为:

var valids = new List<String>();
foreach(String c in countries)
   if(c.ToUpper().StartsWith(input.ToUpper()))
       valids.Add(c);

return (valids.Any()) ? String.Join(",",valids) : "No Matches";

或 LINQ:

var valids = countries.Select(c => c.ToUpper().StartsWith(input.ToUpper())).ToList();
return (valids.Any()) ? String.Join(",",valids) : "No Matches";
于 2013-08-18T01:22:02.640 回答