C# 替换字符串中的单个字符
所以,我使用unity,我有一个字符串,它包含了tic-tac趾板的当前状态。看起来是这样的:C# 替换字符串中的单个字符,c#,string,unity3d,tic-tac-toe,C#,String,Unity3d,Tic Tac Toe,所以,我使用unity,我有一个字符串,它包含了tic-tac趾板的当前状态。看起来是这样的: XOX ONX OXX “N”是一个中性空间 问题是我想用“X”或“O”替换其中一个“N”。 我尝试使用: board[n] = "X"; 但我明白了 无法分配属性或索引器,它是只读的 所以我在想办法改变其中一个“N”。这是我的密码 if (manager.turn == 1 && !isUsed) { xSprite.enabled = true; manager
XOX
ONX
OXX
“N”是一个中性空间
问题是我想用“X”或“O”替换其中一个“N”。
我尝试使用:
board[n] = "X";
但我明白了
无法分配属性或索引器,它是只读的
所以我在想办法改变其中一个“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
包含新放置的“片段”,并且indexOfNew
包含需要替换的字符串中的索引
当然,您可以将选择的选项包装到扩展方法中:
public static string ReplaceAt(this string inputString, int newCharIndex, char newChar)
{
var newString = // Insert your choice of replacement from above here
return newString;
}
以下是您可以使用的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
包含新放置的“片段”,并且indexOfNew
包含需要替换的字符串中的索引
当然,您可以将选择的选项包装到扩展方法中:
public static string ReplaceAt(this string inputString, int newCharIndex, char newChar)
{
var newString = // Insert your choice of replacement from above here
return newString;
}
Tic-Tac趾板不是字符串,它是一个3×3的标记网格,例如chars。您应该将其表示为数组,而不是字符串:
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';
Tic-Tac趾板不是字符串,它是一个3×3的标记网格,例如chars。您应该将其表示为数组,而不是字符串:
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=board.Remove(n,1),Insert(n,X)代码>,但是你确实应该考虑一个不同的数据结构,比如2D char数组。<代码> String 是不可更改的。你必须做board=board.Remove(n,1),Insert(n,X)代码>,但您确实应该考虑不同的数据结构,比如2D char数组。