0

入力を受け取り、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][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 に答える