替换字符串中的单个字符

时间:2017-02-26 01:00:25

标签: c# string unity3d tic-tac-toe

所以,我使用统一,我有这个字符串,包含一个井字棋盘的当前状态。它看起来像是:

XOX
ONX
OXX

" N"是一个中立的空间。

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

board[n] = "X";

但是我得到了

  

"无法分配属性或索引器,它是只读的#34;

所以我试图找到改变其中一个" 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;
}

2 个答案:

答案 0 :(得分:4)

Tic-Tac-Toe板不是一个字符串,它是一个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';

答案 1 :(得分:1)

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

<强> 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());

SubString和String Interpolation

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

假设board包含原始字符串,newChar包含新放置的&#34;片段&#34;并且indexOfNew包含您需要替换的字符串中的索引。

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

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