using System;
namespace stringdouble
{
public class populate
{
public string string1;
public string string2;
public populate (string string1 ,string string2)
{
for (int i=1; i < string1.Length; i++)
{
if (string1[i] == string1[i-1])
{
string2[i] = string1[i];//error on this line
Console.WriteLine ("Character Copied");
Console.ReadKey();
Console.Clear();
}
}
Console.WriteLine (string2);
}
}
这是代码,但由于某种原因,它给了我上面输入的错误。我试图删除字符串中的重复项并将它们复制到一个新的。
我在new populate(FirstString, SecondString);
打电话给你。
答案 0 :(得分:7)
字符串是不可变的,因此一旦创建它们就无法在不创建新字符串的情况下修改它们。这就是当你尝试从字符串修改字符时得到异常的原因。
您可以使用Linq仅获取唯一字符:
string uniqueCharacters = new string(string1.Distinct().ToArray());
或者,如果你想要一个新字符串中的所有重复字符:
var dupChars = string1.GroupBy(c => c)
.Where(g => g.Count() > 1)
.Select(g => g.First());
string dupliateCharacters = new string(dupChars.ToArray());
正如BartozKP所提到的,也许你想要创建一个相等的相邻字符串。以下是使用StringBuilder
和循环的可能实现:
public string Populate(string text)
{
StringBuilder sb = new StringBuilder();
if(text.Length > 1)
{
for (int i = 1; i < text.Length; i++)
{
Char c = text[i];
if (c == text[i - 1])
sb.Append(c);
}
}
return sb.ToString();
}
答案 1 :(得分:4)
您可以使用String#ToCharArray()
将字符串转换为字符数组。
在您的代码中:
char[] chars1 = string1.ToCharArray();
....
string result = new string(chars);
答案 2 :(得分:2)
string
是.NET Framework中String
的别名。 .NET String是不可变的。将string2
设为StringBuilder
类的对象,以使代码正常工作。
答案 3 :(得分:0)
一个没有实际功能的工作版本:
public class populate
{
public populate (string string1 ,string string2)
{
char[] result = string2.ToCharArray();
for (int i=1; i < string1.Length; i++)
{
if (string1[i] == string1[i-1])
{
result[i] = string1[i];
Console.WriteLine ("Character Copied");
Console.ReadKey();
Console.Clear();
}
}
string2 = new string(result);
Console.WriteLine (string2);
}
基于HimBromBeere提供的答案。但是,这不会删除string1
中的所有重复项。如果您真的想这样做,请参阅TimSchmelter的回答。