我试图替换字符串中的字符,在本例中是一个数字,另一个数字增加1,然后将其添加回原始字符串并替换前一个数字字符
在以下代码段中,执行此代码后,sams2
应变为sams3
但是,我一直收到错误,Unable to index into an object of type System.String.
是否无法通过索引替换字符?对于这样的事情,有更好的方法吗?
$SAMAccountName = "sams2"
$lastChar = $SAMAccountName.Length - 1
[int]$intNum = [convert]::ToInt32($SAMAccountName[$lastChar])
$convertedChar = [convert]::ToString($intNum + 1)
$SAMAccountName[$lastChar] = $convertedChar
答案 0 :(得分:1)
只有增量数是一位数时才会有效。
$SAMAccountName = "sams2"
$partOne = $SAMAccountName.SubString(0, $SAMAccountName.Length - 1)
$partTwo = [int]$SAMAccountName.SubString($SAMAccountName.Length - 1, 1) + 1
$SAMAccountName = "$partOne$partTwo"
答案 1 :(得分:0)
好的,这是一个两步过程。首先我们得到数字,然后我们在字符串中替换该数字。
'sams2' |%{
$Int = 1+ ($_ -replace "^.*?(\d+)$",'$1')
$_ -replace "\d+$",$Int
}
答案 2 :(得分:0)
也许尝试正则表达式和组,然后能够免费处理多位数...
$SAMAccountName = "sam2"
# use regex101.com for help with regular expressions
if ($SAMAccountName -match "(.*?)(\d+)")
{
# uncomment for debugging
#$Matches
$newSAMAccountName = $Matches[1] + (([int]$Matches[2])+1)
$newSAMAccountName
}
答案 3 :(得分:0)
您的代码中有几点需要注意:
请看下面的代码:
$SAMAccountName = "sams2"
$sb = [System.Text.StringBuilder]$SAMAccountName
$lastChar = $SAMAccountName.Length - 1
[int]$intNum = [convert]::ToInt32($SAMAccountName[$lastChar])
$covertedChar = [convert]::ToChar($intNum + 1)
$sb[$lastChar] = $covertedChar
[string]$sb
您还可以使用其他方法,例如以下方法:
$SAMAccountName = "sams2"
$SAMAccountName.Substring(0, $SAMAccountName.Length-1)+([int]$SAMAccountName.Substring($SAMAccountName.Length-1, 1)+1)