C# 检查字符串是否包含字典键->;删除键并添加值

C# 检查字符串是否包含字典键->;删除键并添加值,c#,linq,generic-collections,C#,Linq,Generic Collections,我被一个检查字符串('145340000000875e')是否包含字母的函数卡住了。 如果包含字母(a-z),请删除该字母并在末尾添加字符串 为了实现这一点,我创建了一个字典对,它将a映射到09001,b映射到09002[…],z映射到09026 这是我目前的代码: public static string AlterSerial(string source) { Dictionary<char, string> pairs = new Dictionary<char,

我被一个检查字符串('145340000000875e')是否包含字母的函数卡住了。 如果包含字母(a-z),请删除该字母并在末尾添加字符串

为了实现这一点,我创建了一个
字典
对,它将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;
}
publicstaticstringalterserial(字符串源)
{
字典对=新字典();
添加('a','09001”);
...
int index=source.IndexOf(x);
如果(索引!=-1)
{
返回源。删除(索引,1);
}
返回源;
}
如何检查
字符串是否包含26个键中的一个,删除此键并将相应的字符串添加到源字符串的末尾

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


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

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);
}
EDIT2:如果我没有正确理解OP,因此他想要删除字母并将替换字符串添加到源字符串的末尾,那么
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);
}
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);
}
String mystring=“1453a400e0000b875”;
字典对=新字典();
添加('a','09001”);
添加('b','09002”);
添加('c','09003”);
添加('d','09004”);
添加('e','09005”);
//...
var lettersList=mystring.Where(a=>Char.IsLetter(a));
foreach(字母列表中的字符)
{
int index=mystring.IndexOf(字母);
字符串替换;
TryGetValue(mystring[index],out替换);
mystring=mystring.Substring(0,索引)+substitute+mystring.Substring(索引+1);
}

检查,它的工作

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

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);
}
EDIT2:如果我没有正确理解OP,因此他想要删除字母并将替换字符串添加到源字符串的末尾,那么
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);
}
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);
}
String mystring=“1453a400e0000b875”;
字典对=新字典();
添加('a','09001”);
添加('b','09002”);
添加('c','09003”);
添加('d','09004”);
添加('e','09005”);
//...
var lettersList=mystring.Where(a=>Char.IsLetter(a));
foreach(字母列表中的字符)
{
int index=mystring.IndexOf(字母);
字符串替换;
TryGetValue(mystring[index],out替换);
mystring=mystring.Substring(0,索引)+substitute+mystring.Substring(索引+1);
}
检查,它的工作

试试这个:

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;
....
字典对=新字典();
添加('a','09001”);
...
foreach(成对的KeyValuePair条目)
{
if(source.Contains(entry.Key))//.Key必须大写
{
source=source.Replace(entry.Key,“”)+entry.Value;
打破
}
}
返回源;
....
试试这个:

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;
....
字典对=新字典();
添加('a','09001”);
...
foreach(成对的KeyValuePair条目)
{
if(source.Contains(entry.Key))//.Key必须大写
{
source=source.Replace(entry.Key,“”)+entry.Value;
打破
}
}
返回源;
....

尼古拉的答案很好,如果你喜欢,你应该把它标记为答案。但是我喜欢这个简单的方法(稍微借用了一些东西:p)


尼古拉的答案很好,如果你喜欢,你应该把它标记为答案。但是我喜欢这个简单的方法(稍微借用了一些东西:p)



如果字符串多次包含同一个字母怎么办?字符串有什么问题。替换(“a”、“09001”)等?字母是否总是在字符串的末尾?是否只涉及一个字母,或者是否可能:
14g534b00a00c008sd75e
?如果是,会发生什么?它们是按顺序(字典)被替换还是随机替换,或者什么…?只有一个字母。它大部分在末尾,但并不总是。如果字符串多次包含同一个字母会怎样?字符串有什么问题。替换(“a”、“09001”)等?字母是否总是在字符串的末尾?是否只涉及一个字母,或者是否可能:
14g534b00a00c008sd75e
?如果是,会发生什么?它们是按顺序(字典)被替换还是随机替换,或者什么…?只有一个字母。它主要在结尾,但并不总是。不要忘记有26个字符,对于每个字符,您需要检查字符串是否包含它,如果包含,则替换它。看看有没有字母,然后从字典里把它替换掉,不是更好吗。。。Nikola的算法通常会更快…不要忘记有26个字符,对于每个字符,您需要检查字符串是否包含它,如果包含,则替换它。看看有没有字母,然后从字典里把它替换掉,不是更好吗。。。Nikola的算法通常会更快…是的,我只是想处理其他可能的情况。这不是一个坏的解决方案,但它确实明确表示要添加到en