從之前的章節中,我們知道PowerShell將一切儲存在對象中,那這些對象中包含了一系列中的稱之為方法的指令。預設文本儲存在String對象中,它包含了許多非常有用的處理文本的命令。例如,要確定一個檔案的副檔名,可以使用LastIndexOf()擷取最後一個字元“.”的位置,繼續使用Substring()擷取副檔名子串。
PS> $path = "C:\prefs.js" PS> $path.Substring( $path.LastIndexOf(".")+1 ) Js
另外一條途徑,使用Split方法,對檔案的完整名稱進行分割,得到一個字串數組,取最後一個元素,PowerShell中可以通過索引-1來擷取數組中最後一個元素。
PS> $path.Split(".")[-1] Js
下面的表格會給出String對象的所有方法:
| 函數 |
描述 |
樣本 |
| CompareTo() |
與另一個字串比較 |
(“Hello”).CompareTo(“Hello”) |
| Contains() |
是否包含制定子串 |
(“Hello”).Contains(“ll”) |
| CopyTo() |
拷貝子串至新字串中 |
$a = (“HelloWorld”).toCharArray()(“User!”).CopyTo(0, $a, 6, 5)$a |
| EndsWith() |
是否以制定子串結尾 |
(“Hello”).EndsWith(“lo”) |
| Equals() |
是否與另一個字串相同 |
(“Hello”).Equals($a) |
| IndexOf() |
返回第一次匹配的所索引 |
(“Hello”).IndexOf(“l”) |
| IndexOfAny() |
返回字串中任一字元的最初相符索引 |
(“Hello”).IndexOfAny(“loe”) |
| Insert() |
在指定位置插入字串 |
(“HelloWorld”).Insert(6,”brave “) |
| GetEnumerator() |
枚舉字串中所有字元 |
(“Hello”).GetEnumerator() |
| LastIndexOf() |
字元的最後匹配位置 |
(“Hello”).LastIndexOf(“l”) |
| LastIndexOfAny() |
任一字元的最後匹配位置 |
(“Hello”).LastIndexOfAny(“loe”) |
| PadLeft() |
左邊補齊空白是字串至指定長度 |
(“Hello”).PadLeft(10) |
| PadRight() |
右邊填充空白是字串至指定長度 |
(“Hello”).PadRight(10) + “World!” |
| Remove() |
從指定位置開始移除指定長度 |
(“PsTips”).Remove(2,2) |
| Replace() |
替換指定字串 |
(“PsTips”).replace(“Ps”,”PS1″) |
| Split() |
以指定分隔字元切割字串 |
(“HelloWorld”).Split(“l”) |
| StartsWith() |
是否以指定子串開始 |
(“HelloWorld”).StartsWith(“He”) |
| Substring() |
從指定位置取指定長度子串 |
“HelloWorld”).Substring(4,3) |
| ToCharArray() |
轉換成字元數組 |
(“HelloWorld”).toCharArray() |
| ToLower() |
轉換成小寫 |
(“HelloWorld”).toLower() |
| ToLowerInvariant () |
以地區規則轉換成小寫 |
(“HelloWorld”).ToUpperInvariant() |
| ToUpper() |
轉換成大寫 |
(“HelloWorld”).ToUpper() |
| ToUpperInvariant () |
以地區規則轉換成大寫 |
(“HelloWorld”).ToUpperInvariant () |
| Trim() |
移除字串前後空格 |
(” HelloWorld “). Trim() |
| TrimEnd() |
移除字串結尾的空格 |
(“HelloWorld “). TrimEnd() |
| TrimStart() |
移除字串開始的空格 |
(” HelloWorld”). TrimStart() |
| Chars() |
返回指定位置的字元 |
(“Hello”).Chars(0) |
以Split()為例來分析方法
在之前的章節中,我們已經知道可以通過Get-Member來查看一個對象中包含了那些可以被調用的方法。正好最為一個簡單的回顧,來查看Split的定義。
PS C:\> ("jb51.net" | Get-Member Split).definition string[] Split(Params char[] separator), string[] Split(char[] separator, int count), string[] Split(char[] separator, System.StringSplitOptions options), string[] Split(char[] separator, int count, System.StringSplitOptions options), string[] Split(string[] separator, System.StringSplitOptions options), string[] Split(string[] sepa rator, int count, System.StringSplitOptions options)
Define屬性可以擷取方法參數定義,但是可讀性比較坑爹。我們仍然用上面表格中的Replace方法,將分隔字元稍作替換,即可增強可讀性。
PS C:\> ("jb51.net" | Get-Member Split).definition.Replace("), ", ")`n")string[] Split(Params char[] separator)string[] Split(char[] separator, int count)string[] Split(char[] separator, System.StringSplitOptions options)string[] Split(char[] separator, int count, System.StringSplitOptions options)string[] Split(string[] separator, System.StringSplitOptions options)string[] Split(string[] separator, int count, System.StringSplitOptions options)
之前說過反引號,類似進階語言中的轉義符反斜線。
從上面的輸出可以發現Split有6種不同的調用方法,而之前可能更多的只使用過一個參數的方法。PowerShell在處理文本時,可能會碰到多個分隔字元,而Split方法調用只須一次即可。
PS C:\> "http://www.jb51.net".split(":./")httpwwwpstipsnet
中間有空白,咋整,能移除嗎,StringSplitOptions輕裝上陣:
PS C:\> "http://www.jb51.net".split(":./",[StringSplitOptions]::RemoveEmptyEntries)httpwwwpstipsnet
之前有一個小演算法題,移除字串中相鄰的重複的空格。在不考慮效率的前提下,可以使用Split先分割,分割後再將得到的元素以指定分隔字元拼接。但是拼接用到的Join方法,並不屬於string對象,而屬於String類,也正是下面要講的。
Text and Regular Expressions
原文: http://www.jb51.net/string-object-methods.html