替换字符串中的单个字符

Replace single character in a String

所以,我正在使用 unity,并且我有这个包含井字棋盘当前状态的字符串。看起来像这样:

XOX
ONX
OXX

"N" 中立 space.

问题是我想用 "X" 或 "O" 替换其中一个 "N"。 我尝试使用 :

board[n] = "X";

但我明白了

"property or indexer cannot be assigned, it is read only"

所以我想找到一种方法来改变其中一个 "N"。这是我的代码

if (manager.turn == 1 && !isUsed)
{
    xSprite.enabled = true;
    manager.board[int.Parse(gameObject.name)-1] = 'X';
    manager.GameEndingDraw();
    isUsed = true;
    manager.turn = 2;
}
else if (manager.turn == 2 && !isUsed)
{
    oSprite.enabled = true;
    manager.board[int.Parse(gameObject.name)-1] = 'O';
    manager.GameEndingDraw();
    isUsed = true;
    manager.turn = 1;
}

您可以使用以下 4 种方法:

ToCharArray

var array = board.ToCharArray();
array[indexOfNew] = newChar;
board = new string(array);

StringBuilder

var sb = new StringBuilder(board);
sb[indexOfNew] = newChar;
board = sb.ToString();

String.Remove 和 String.Insert

board = board.Remove(indexOfNew, 1)
    .Insert(indexOfNew, newChar.ToString());

子字符串和字符串插值

board = $"{board.Substring(0, indexOfNew)}{newChar}{board.Substring(indexOfNew+1, board.Length-indexOfNew-1)}";

假设 board 包含原始字符串,newChar 包含新放置的 "piece" 并且 indexOfNew 包含您需要替换的字符串中的索引。

您当然可以将您选择的选项包装在扩展方法中:

public static string ReplaceAt(this string inputString, int newCharIndex, char newChar)
{
    var newString = // Insert your choice of replacement from above here
    return newString;
}

井字棋盘不是字符串,它是一个 3×3 的标记网格,例如字符。您应该将其表示为数组,而不是字符串:

var board = new char[3, 3];
for (int i = 0; i < board.GetLength(0); i++)
    for (int j = 0; j < board.GetLength(1); j++)
        board[i, j] = 'N';

然后您可以通过坐标设置每个标记:

board[0, 0] = 'X';