1

文字が含まれている場合、文字列 ('14534000000875e') をチェックする関数で行き詰まっています。文字 (az) が含まれている場合は、文字を削除して末尾に文字列を追加します。

これを実現するためにDictionary<char, string>、a を 09001 に、b を 09002 [...] に、z を 09026 にマッピングしたペアを作成しました。

これまでの私のコードは次のとおりです。

public static string AlterSerial(string source)
{
    Dictionary<char, string> pairs = new Dictionary<char, string>();
    pairs.Add('a', "09001");
    ...

    int index = source.IndexOf(x);
    if (index != -1)
    {
        return source.Remove(index, 1);
    }
    return source;
}

文字列に 26 個のキーのいずれかが含まれているかどうかを確認し、sourceこのキーを削除して、対応する文字列をソース文字列の末尾に追加するにはどうすればよいですか?

注: 文字は必ずしもソースの最後にあるとは限りません。

敬具

4

3 に答える 3

7

これを試して:

Dictionary<char, string> pairs = new Dictionary<char, string>();
pairs.Add('a', "09001");
...

foreach(KeyValuePair<string, string> entry in pairs)
{
    if (source.Contains(entry.Key))  // .Key must be capitalized
    {
      source = source.Replace(entry.Key, "") + entry.Value;
      break;
    }
}

return source;
....
于 2013-06-19T13:02:12.633 に答える
2

ニコラの答えは良いです。気に入ったら、答えとしてマークしてください。しかし、私はこの単純な方法が好きです(いくつかのものを少し借りました:p)。

var Alphabet = "abcdefghijklmnopqrstuvwxyz".ToArray();

var Pairs = new Dictionary<char, string>();
for(var i = 1; i < Alphabet.Count() +1; i++)
    Pairs.Add(Alphabet[i-1], "090" + (i < 10 ? "0" + i.ToString() : i.ToString()));

var Source = "14534000000875e";

var Chars = Source.Where(x => Char.IsLetter(x));
var Output = string.Empty();

foreach(var Char in Chars)
    Output = Source.Replace(Char.ToString(), Pairs[Char]);

または、最後に、繰り返される文字に対して1回だけ置換が必要な場合は?

foreach(var Char in Chars)
Output = Source.Replace(Char.ToString(),"") + (Pairs[Char]);
于 2013-06-19T13:30:44.080 に答える