我遇到了一个检查字符串('14534000000875e')的函数,如果它包含一个字母。 如果它包含一个字母(a-z),请删除该字母并在末尾添加一个字符串。
为了实现这一点,我创建了一个Dictionary<char, string>
对,它已映射到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个密钥中的一个,删除此密钥并将相应的字符串添加到源字符串的末尾?
注意:字母并非始终位于来源的末尾。
亲切的问候
答案 0 :(得分:6)
试试这个:
Dictionary<char, string> pairs = new Dictionary<char, string>();
pairs.Add('a', "09001");
...
foreach(KeyValuePair<string, string> entry in pairs)
{
if (source.Contains(entry.key))
{
source = source.Replace(entry.key, "") + entry.Value;
break;
}
}
return source;
....
答案 1 :(得分: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);
}
检查并且有效!
答案 2 :(得分: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]);