C#常量字符串调用
我制作了一些常量字符串:C#常量字符串调用,c#,C#,我制作了一些常量字符串: public const string a_sub = "S"; public const string b_sub = "Y"; public const string c_sub = "X"; public const string d_sub = "W"; // ... 我有一段文字: string str = "This is a test"; 我想做一些类似的事情: foreach(char c in str) { str.Repla
public const string a_sub = "S";
public const string b_sub = "Y";
public const string c_sub = "X";
public const string d_sub = "W";
// ...
我有一段文字:
string str = "This is a test";
我想做一些类似的事情:
foreach(char c in str)
{
str.Replace(c,c_sub);
假设c是a,那么它是:
str.Replace(c, a_sub);
如果c是d,那么它是:
str.Replace(c, d_sub);
等等
}
但是我想不出一个办法,来点帮助……好吗 在C#中,字符串是不可变的。要更改字符串的内容,需要创建一个新字符串
在您的例子中,您似乎将所有字符串的字符替换为a_sub
,因此您可以简单地将a_sub
字符重复n次,其中n是原始字符串的长度:
string str = "This is a test";
const char a_sub = 'S';
str = new string(a_sub, str.Length);
编辑:如果子项
需要是字符串(而不是字符),则可以使用:
string str = "This is a test";
const string a_sub = "S";
str = string.Concat(Enumerable.Repeat(a_sub, str.Length));
在C#中,字符串是不可变的。要更改字符串的内容,需要创建一个新字符串
在您的例子中,您似乎将所有字符串的字符替换为a_sub
,因此您可以简单地将a_sub
字符重复n次,其中n是原始字符串的长度:
string str = "This is a test";
const char a_sub = 'S';
str = new string(a_sub, str.Length);
编辑:如果子项
需要是字符串(而不是字符),则可以使用:
string str = "This is a test";
const string a_sub = "S";
str = string.Concat(Enumerable.Repeat(a_sub, str.Length));
使用字典和Stringbuilder:
Dictionary<char, char> mapper = new Dictionary<char, char>
{
{'a','S'},
{'b','D'},
.......
};
var str = "aaaaaaaabbbbbbbb";
var sb = new StringBuilder(str);
for (int i = 0; i < sb.Length; i++)
{
sb[i] = mapper[sb[i]];
}
var newStr = sb.ToString(); // SSSSSSSSDDDDDDDD
字典映射器=新字典
{
{'a','S'},
{'b','D'},
.......
};
var str=“aaaaaaaa bbbbbbbb”;
var sb=新的StringBuilder(str);
for(int i=0;i
使用字典和Stringbuilder:
Dictionary<char, char> mapper = new Dictionary<char, char>
{
{'a','S'},
{'b','D'},
.......
};
var str = "aaaaaaaabbbbbbbb";
var sb = new StringBuilder(str);
for (int i = 0; i < sb.Length; i++)
{
sb[i] = mapper[sb[i]];
}
var newStr = sb.ToString(); // SSSSSSSSDDDDDDDD
字典映射器=新字典
{
{'a','S'},
{'b','D'},
.......
};
var str=“aaaaaaaa bbbbbbbb”;
var sb=新的StringBuilder(str);
for(int i=0;i
在字典中定义常量
private static Dictionary<string, string> dict = new Dictionary<string, string>
{
{"a", "S"},
{"b", "Y"},
{"c", "X"},
...
};
var str = "This is a test";
foreach (var c in dict)
{
str = str.Replace(c.Key, c.Value);
}
在字典中定义常量
private static Dictionary<string, string> dict = new Dictionary<string, string>
{
{"a", "S"},
{"b", "Y"},
{"c", "X"},
...
};
var str = "This is a test";
foreach (var c in dict)
{
str = str.Replace(c.Key, c.Value);
}
只是另一种方法 通过使用反射和StringBuilder获得临时结果(这将有助于避免错误/重复的替换)
string str=“这是一个测试”;
StringBuilder结果=新建StringBuilder();
对于(int-idx=0;idx
我发现这个解决方案对于初学者来说有点复杂,但是更容易维护常量中的更改。
一个弱点…由于变量命名约定,它不会覆盖所有可能的字符
编辑
感谢@appect,因为他们的评论改进了答案,避免了不必要的伪类,这只是另一种方法
Dictionary<char, char> GetChar = new Dictionary<char, char>()
{
{'a','S'},
{'b','Y'}
};
string str = "This is a test";
string newStr = "";
for (int i = 0; i < str.Length; i++)
{
newStr = newStr + GetChar[str[i]];
}
通过使用反射和StringBuilder获得临时结果(这将有助于避免错误/重复的替换)
string str=“这是一个测试”;
StringBuilder结果=新建StringBuilder();
对于(int-idx=0;idx
我发现这个解决方案对于初学者来说有点复杂,但是更容易维护常量中的更改。
一个弱点…由于变量命名约定,它不会覆盖所有可能的字符
编辑
感谢@appect,为避免不必要的伪类提供了改进答案的注释Dictionary GetChar=newdictionary()
Dictionary<char, char> GetChar = new Dictionary<char, char>()
{
{'a','S'},
{'b','Y'}
};
string str = "This is a test";
string newStr = "";
for (int i = 0; i < str.Length; i++)
{
newStr = newStr + GetChar[str[i]];
}
{
{'a','S'},
{'b','Y'}
};
string str=“这是一个测试”;
字符串newStr=“”;
对于(int i=0;i
我想这就是你想要的。使用dictionary是更好的主意,newStr将返回您想要的内容。dictionary GetChar=newdictionary()
{
{'a','S'},
{'b','Y'}
};
string str=“这是一个测试”;
字符串newStr=“”;
对于(int i=0;i
我想这就是你想要的。使用字典是更好的主意,newStr将返回您想要的内容。似乎您希望使用类似ROT13的chiffre,但使用非顺序字典(我称之为字典,因为您的翻译不是按字母顺序排列的) 由于C#似乎缺少像Python的translate这样方便的函数:
# ... Map a to d, b to e, and c to f.
dict = str.maketrans("abc", "def")
print(dict)
# Translate this value.
value = "aabbcc"
result = value.translate(dict)
print(result)
#Output: ddeeff
您必须手动实现映射,使用字典而不是常量
请小心将翻译写入新变量,而不是替换旧变量,因为您使用的是一组无序的键,因此以后可能会替换您刚刚翻译的字符(在您的示例中,首先将“a”替换为“s”,然后将“s”替换为“h”)
使用系统;
使用系统文本;
使用System.Collections.Generic;
公开课考试
{
公共静态void Main()
{
var d=新字典
{
{'a','S'},
{'b','Y'},
{'c','X'},
{'d','W'},
{'e',