检查字符串是否包含字典Key ->去掉关键,增加价值

本文关键字:增加 是否 字符串 包含 字典 Key 检查 | 更新日期: 2023-09-27 18:19:06

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

为了实现这一点,我创建了一个Dictionary<char, string> pair,它将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;
}

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

注意:字母并不总是在源文件的末尾

亲切的问候

检查字符串是否包含字典Key ->去掉关键,增加价值

试试这个:

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

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

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

检查过了,它工作了!

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]);