为什么我可以使用split
作为方法和命令行开关,而不是join
?如何发现对象支持的标志(例如-join
)?
> "a,b,c,d" -split ','
a
b
c
d
> "a,b,c,d".split(',')
a
b
c
d
> "a,b,c,d".split(',').join(';')
Method invocation failed because [System.String] does not contain a method named 'join'.
At line:1 char:1
+ "a,b,c,d".split(',').join(';')
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidOperation: (:) [], ParentContainsErrorRecordException
+ FullyQualifiedErrorId : MethodNotFound
> "a,b,c,d".split(',') -join ';'
a;b;c;d
答案 0 :(得分:2)
为什么我可以使用split作为方法和命令行开关,但不能加入?
由于String
个对象的方法为Split()
,但arrays没有方法Join()
,而-split
和{{1}由PowerShell提供operators。
-join
类确实有一个(静态)String
方法补充Join()
。你这样使用它:
Split()
您可以做的另一件事是将output field separator([String]::Join(',', ("a,b,c,d" -split ','))
)设置为分隔符并将数组嵌入字符串中:
$OFS
BTW,-split
和Split()
不会以同样的方式工作,所以不要混淆他们。前者使用正则表达式,后者使用字符数组。
PS C:\> 'a b' -split '\s+' a b PS C:\> 'a b'.Split('\s+') a b PS C:\> 'a,b;c' -split (',', ';') Cannot convert value ";" to type "System.Int32". Error: "Input string was not in a correct format." At line:1 char:9 + 'a,b;c' -split (',', ';') + ~~~~~~ + CategoryInfo : NotSpecified: (:) [], RuntimeException + FullyQualifiedErrorId : RuntimeException PS C:\> 'a,b;c'.Split((',', ';')) a b c
如何发现对象支持的标志(例如-join)?
阅读documentation。 $OFS = ','
"$("a,b,c,d" -split ',')"
不是方法,标志或命令行切换。它是PowerShell operator。
答案 1 :(得分:1)
如果你愿意的话:
"String" | Get-Member
您将看到没有Join
方法可用,只有Split()。
您可以使用-Join
运算符代替-Split
以及
在您的示例中:
"a,b,c,d".split(',') -join ";"
或使用:[string]::Join()
类