我没有遇到问题 - 我试图做一个简单的动作:
for(i = x.Length-1, j = 0 ; i >= 0 ; i--, j++)
{
backx[j] = x[i];
}
两者都被宣布:
String x;
String backx;
有什么问题?它说标题中的错误...... 如果有问题 - 还有另一种方法吗? 结果(名称为'backx'提示)是backx将向后包含字符串X. 附: x不为空 - 它包含来自另一个字符串的子字符串。
答案 0 :(得分:16)
字符串是不可变的:您可以在某个位置检索字符,但不能直接将字符更改为新字符。
相反,您必须使用更改来构建新字符串。有几种方法可以做到这一点,但StringBuilder
的工作方式与您已有的方式类似:
StringBuilder sb = new StringBuilder(backx);
sb[j] = x[i];
backx = sb.ToString();
编辑:如果您查看string
面向公众的API,您会看到此索引器:
public char this[int index] { get; }
这表明您可以“获取”某个值,但由于没有“set”可用,因此您无法为该索引器指定值。
EDITx2:如果你正在寻找一种方法来反转一个字符串,有几种不同的方法,但这里有一个例子,说明它是如何工作的:http://www.dotnetperls.com/reverse-string
答案 1 :(得分:2)
String
在.NET中是不可变的 - 这就是你得到错误的原因。
您可以使用LINQ获取反向字符串:
string x = "abcd";
string backx = new string(x.Reverse().ToArray());
Console.WriteLine(backx); // output: "dcba"
答案 2 :(得分:1)
在C#中string
是不可变的。你无法将第X个角色“设置”为你想要的任何角色。如果您想构建一个新字符串,或者能够“编辑”一个字符串,请使用StringBuilder类。
答案 3 :(得分:1)
字符串在C#中是不可变的。您可以在此处详细了解:http://msdn.microsoft.com/en-us/library/362314fe.aspx
答案 4 :(得分:0)
当你将它们视为数组时,你拥有的两个变量都是字符串(嗯,它们是)。当然,通过这种机制访问字符串中的字符是一个有效的语句,你不能真正用它来分配它。
由于您正在尝试撤消字符串,请查看this帖子。它有很多信息。
答案 5 :(得分:0)
createSomething
这很简单,不直接涉及数组。
答案 6 :(得分:0)
下面的代码只是交换字符串中每个字符的索引,这使得您只需要在原始字符串的一半处迭代,如果您处理大量字符,这非常有效。结果是原始字符串反转。我用一个由100个字符组成的字符串对它进行了测试,并在0.0000021秒内执行。
private string ReverseString(string testString)
{
int j = testString.Length - 1;
char[] charArray = new char[testString.Length];
for (int i = 0; i <= j; i++)
{
if (i != j)
{
charArray[i] = testString[j];
charArray[j] = testString[i];
}
j--;
}
return new string(charArray);
}
答案 7 :(得分:0)
字符串是不可变的。您已经转换为Char Array,然后可以进行修改。 或者,您可以使用StringBuilder。
例如
char[] wordArray = word.ToCharArray();
答案 8 :(得分:0)
如果您需要更换,例如字符串中的索引 2 使用这个(它很丑,但可以工作并且易于维护)
V1 - 你知道你想放什么。这里你用伪代码说 string[2] = 'R';
row3String.Replace(row3String[2], 'R');
V2 - 你需要把他们的字符 R 或字符 Y。这里 string[2] = 'R' if is 'Y' or if not stay 'Y' (this一行if需要某种形式的else)
row3String.Replace(row3String[2], row3String[2].Equals('Y') ? 'R' : 'Y');