如何在 powershell 中用特定字符替换项目的字符?
How can I replace a character of a item with a specific character in powershell?
我有一个名为 $Map 的数组,它有 29 个字符串,每行 23 个字符。使用 $CharY 变量指定项目的索引,使用 $CharX 变量指定应替换该项目的哪个字符。我如何实际用字符“0”替换项目的这个字符?我尝试使用 $Map[$CharY][CharX]
但在 运行 这个命令之后,显示错误
At line:1 char:1
+ $Map[$CharY][$CharX] = "0"
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidOperation: (:) [], RuntimeException
+ FullyQualifiedErrorId : CannotIndex
PowerShell 使用的 .NET strings 是 不可变的 。您可以通过索引读取单个字符,但不能直接修改它。相反,使用修改后的字符创建一个新字符串并将其分配回数组:
$Map = 1..29 | ForEach-Object { '1' * 23 }
$CharY = 1
$CharX = 2
$Line = $Map[$CharY].ToCharArray()
$Line[$CharX] = '0'
$Map[$CharY] = -join $Line
$Map
输出:
11111111111111111111111
11011111111111111111111
... [remaining lines omitted] ...
说明:
- 第一行填充
$Map
29 个字符串,每个字符串由 23 个字符组成。
String.ToCharArray()
用于将字符串转换为可以修改的字符数组
- 可以使用
-join
operator is used to create a new string from the individual characters. Alternatively the String constructor that accepts a char array 的一元形式:[String]::new($Line)
。
我有一个名为 $Map 的数组,它有 29 个字符串,每行 23 个字符。使用 $CharY 变量指定项目的索引,使用 $CharX 变量指定应替换该项目的哪个字符。我如何实际用字符“0”替换项目的这个字符?我尝试使用 $Map[$CharY][CharX]
但在 运行 这个命令之后,显示错误
At line:1 char:1
+ $Map[$CharY][$CharX] = "0"
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidOperation: (:) [], RuntimeException
+ FullyQualifiedErrorId : CannotIndex
.NET strings 是 不可变的 。您可以通过索引读取单个字符,但不能直接修改它。相反,使用修改后的字符创建一个新字符串并将其分配回数组:
$Map = 1..29 | ForEach-Object { '1' * 23 }
$CharY = 1
$CharX = 2
$Line = $Map[$CharY].ToCharArray()
$Line[$CharX] = '0'
$Map[$CharY] = -join $Line
$Map
输出:
11111111111111111111111
11011111111111111111111
... [remaining lines omitted] ...
说明:
- 第一行填充
$Map
29 个字符串,每个字符串由 23 个字符组成。 String.ToCharArray()
用于将字符串转换为可以修改的字符数组- 可以使用
-join
operator is used to create a new string from the individual characters. Alternatively the String constructor that accepts a char array 的一元形式:[String]::new($Line)
。