【问题标题】:$string.Substring Index/Length exception$string.Substring 索引/长度异常
【发布时间】:2015-09-29 17:31:35
【问题描述】:

我正在执行以下操作以尝试从字符串中获取最后一个字符(在本例中为“0”)。

$string = "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\hid\Parameters\0"
$parameter = $string.Substring($string.Length-1, $string.Length)

但我得到了这个与子字符串相关的异常:

Exception calling "Substring" with "2" argument(s): "Index and length must
refer to a location within the string.
Parameter name: length"
At line:14 char:5
+     $parameter = $string.Substring($string.Length-1, $string ...
+     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : NotSpecified: (:) [], MethodInvocationException
    + FullyQualifiedErrorId : ArgumentOutOfRangeException

我理解它的含义,但我不确定为什么我得到的索引和长度是正确的。

即使尝试硬编码也会引发相同的异常:

$parameter = $string.Substring(68, 69)

我有什么遗漏吗?

【问题讨论】:

  • 换句话说,您的问题实际上是这样的:“如何在 PowerShell 中获取字符串的最后一个字符?”
  • 正确的账单。我只是想更清楚地知道我到底做错了什么,而不是用其他方法来实现它。
  • Substring 方法在documentation 中进行了非常准确的描述。

标签: powershell


【解决方案1】:

您的第一个参数是字符串中的起始位置,第二个参数是从该位置开始的子字符串的长度。位置 68 和 69 的 2 个字符的表达式为:

$parameter = $string.Substring(68,2)

【讨论】:

  • 谢谢!这样可行。最后做$parameter = $string.Substring($string.Length-1, 1) 来获取我需要的最后一个字符。
  • 查看@ManuelBatsching 的答案以获得更简单的方法。
【解决方案2】:

错误信息试图告诉你的是:子字符串的开头加上子字符串的长度(第二个参数)必须小于或等于字符串的长度。第二个参数不是子串的结束位置。

例子:

'foobar'.Substring(4, 5)

这将尝试从第 5 个字符开始提取长度为 5 的子字符串(索引从 0 开始,因此第 5 个字符的索引为 4):

foobar
    ^^^^^  <- substring of length 5

表示子字符串的第 3-5 个字符将在源字符串之外。

必须将子字符串语句的长度限制为长度减去子字符串的起始位置:

$str   = 'foobar'
$start = 4
$len   = 5
$str.Substring($start, [Math]::Min(($str.Length - $start), $len))

或者,如果您只想从给定位置开始字符串的尾端,则可以完全省略长度:

$str = 'foobar'
$str.Substring(4)

【讨论】:

    【解决方案3】:

    如果字符串的最后一个字符是你想要的,你可以通过简单地将字符串视为一个字符数组并使用相应的索引符号来实现:

    'HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\hid\Parameters\0'[-1]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-08-07
      • 2015-07-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-02-15
      • 2021-07-29
      • 1970-01-01
      相关资源
      最近更新 更多