1

我被困在一个检查字符串('14534000000875e')是否包含字母的函数上。如果它包含一个字母 (az),则删除该字母并在末尾添加一个字符串。

为了实现这一点,我创建了一个Dictionary<char, string>将 a 映射到 09001,b 映射到 09002 [...] 和 z 映射到 09026 的 Pairs

到目前为止,这是我的代码:

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;
}

如何检查source字符串是否包含 26 个键之一,删除此键并将相应的字符串添加到源字符串的末尾?

注意:字母并不总是在来源的末尾。

亲切的问候

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 回答
4

所以这是您的字符串中只有一个字母的解决方案。您需要找到字符串中的字母(如果存在)并找到它的索引。然后您必须插入从字典中获得的相应值而不是字母。

String mystring = "1453400e0000875";
Dictionary<char, string> pairs = new Dictionary<char, string>();
pairs.Add('a', "09001");
pairs.Add('b', "09002");
pairs.Add('c', "09003");
pairs.Add('d', "09004");
pairs.Add('e', "09005");
//...
char letter = mystring.FirstOrDefault(a => Char.IsLetter(a));
if (letter != '\0')
{
      int index = mystring.IndexOf(letter);
      string substitute;
      pairs.TryGetValue(mystring[index], out substitute);
      mystring = mystring.Substring(0, index) + substitute + mystring.Substring(index + 1);
}

编辑:使用字符串的 Replace 方法,if可以像这样更改部分:

char letter = mystring.FirstOrDefault(a => Char.IsLetter(a));
if (letter != '\0')
{
       string substitute;
       pairs.TryGetValue(letter, out substitute);
       mystring = mystring.Replace(letter.ToString(), substitute);
}

EDIT2:如果我没有正确理解 OP,以至于他想删除字母并将替换字符串添加到源字符串的末尾,那么if语句应该是这样的:

if (letter != '\0')
{
       string substitute;
       pairs.TryGetValue(letter, out substitute);
       mystring = mystring.Replace(letter.ToString(), "");
       mystring += substitute;
}

这是字符串中有更多字母时的概括。这是类似的解决方案,但需要遍历字符串中的所有字母。

String mystring = "1453a400e0000b875";
Dictionary<char, string> pairs = new Dictionary<char, string>();
pairs.Add('a', "09001");
pairs.Add('b', "09002");
pairs.Add('c', "09003");
pairs.Add('d', "09004");
pairs.Add('e', "09005");
//...
var lettersList = mystring.Where(a => Char.IsLetter(a));
foreach (char letter in lettersList)
{
        int index = mystring.IndexOf(letter);
        string substitute;
        pairs.TryGetValue(mystring[index], out substitute);
        mystring = mystring.Substring(0, index) + substitute + mystring.Substring(index + 1);
}

检查,它的工作原理!

于 2013-06-19T12:57:02.673 回答
2

Nikola 的回答很好,如果你喜欢它,你应该把它标记为答案。但是我喜欢这种简单的方法(稍微借用了一些东西: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]);

或者如果你想在最后替换一次重复字符?

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