从字符数组中删除一个字母

3
我有一个字符数组。我想删除数组中特定位置的一个元素。
假设我有这个字符数组:OVERFLOW 我想删除数组中的R并调整字符数组大小,使单词变成:OVEFLOW 我还想能够在特定的位置添加新字母。比如说,我想添加字母T,那么单词将会是:OVETFLOW 我不仅仅想替换两个字母。我想首先完全删除,然后在不同位置添加字母。
我尝试使用Remove()方法来解决问题,该方法用于字符串数组。但我还没有找到最佳解决方案。

你想删除当前字母还是当前位置?如果你的数组中有两个字母 R,该怎么办? - Hamlet Hakobyan
将字符数组转换为字符串,进行操作,然后再将其转换回字符数组。 - L.B
数组具有固定的大小。您无法从数组中删除项目。您可以替换其值,或创建具有不同大小的新数组。 - MarcinJuraszek
4个回答

6
var theString = "OVERFLOW";
var aStringBuilder = new StringBuilder(theString);
aStringBuilder.Remove(3, 1);
aStringBuilder.Insert(3, "T");
theString = aStringBuilder.ToString();

4

试试这个:

char[] myCharArray = new char[] { 'O', 'V', 'E', 'R', 'F', 'F', 'L', 'O', 'W' };
string str = new string(myCharArray);
int index = str.IndexOf('R');
str=str.Remove(index,1);
str=str.Insert(index, "Z");

myCharArray = str.ToCharArray();

我不想替换两个字母。我想要完全删除一个字母,然后在另一个位置添加另一个字母。 - EM10

1
作为一个快速的示例:
string str = "OWERFLOW";
char[] array = str.ToCharArray();

char[] array2 = RemveFromArray(array, 'R');
char[] array3 = InsertIntoArray(array2, 'T', 3);
char[] array4 = RemveFromArrayAt(array, 3);

static char[] RemveFromArray(char[] source, char value)
{
    if (source == null)
        return null;

    char[] result = new char[source.Length];

    int resultIdx = 0;
    for (int ii = 0; ii < source.Length; ii++)
    {
        if(source[ii] != value)
            result[resultIdx++] = source[ii];
    }

    return result.Take(resultIdx).ToArray();
}

static char[] InsertIntoArray(char[] source, char value, int insertAt)
{
    if (source == null || insertAt > source.Length)
        return null;

    char[] result = new char[source.Length + 1];

    Array.Copy(source, result, insertAt);
    result[insertAt] = value;
    Array.Copy(source, insertAt, result, insertAt + 1, source.Length - insertAt);

    return result;
}

static char[] RemveFromArrayAt(char[] source, int removeAt)
{
    if (source == null || removeAt > source.Length)
        return null;

    char[] result = new char[source.Length - 1];
    Array.Copy(source, result, removeAt);
    Array.Copy(source, removeAt + 1, result, removeAt, source.Length - removeAt - 1);

    return result;
}

0

另一种方法:

            string str = "OVERFLOW";
            var arr=str.ToList();
            arr.Remove('F');
            arr.Insert(3, 'T');
            str =new string(arr.ToArray());

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接