2016-07-24 65 views
2

爲什麼我可以使用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 

回答

2

爲什麼我可以使用拆分作爲一種方法和命令行開關,但不參加?

由於String對象都有一個方法Split(),但arrays沒有方法Join(),而-split-join由PowerShell中提供operators

雖然,String類確實有一個(靜態)Join()方法補充Split()。您可以使用這樣的:

[String]::Join(',', ("a,b,c,d" -split ',')) 

你可以做的是設置output field separator$OFS)到您的分隔符,並嵌入您的字符串數組的另一件事情:

$OFS = ',' 
"$("a,b,c,d" -split ',')" 

BTW,-splitSplit()唐工作方式不一樣,所以不要混淆它們。前者使用正則表達式,後者是字符數組。

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-join不是方法,標誌或命令行開關。這是一個PowerShell operator

1

如果你會做什麼:

"String" | Get-Member 

,你會看到,有沒有可用的Join方法,只有斯普利特()。

您可以使用,但是在-Join操盤手,其存在-Split以及

在你的榜樣:

"a,b,c,d".split(',') -join ";" 

或使用:[string]::Join()

+0

如何查看所有的運營商? – IttayD

+0

'Get-Help about_Operators' – Avshalom

相關問題