PowerShell String对象方法小结
从之前的章节中,我们知道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:\> "https://www.jb51.net".split(":./") http www pstips net
中间有空白,咋整,能移除吗,stringsplitoptions轻装上阵:
ps c:\> "https://www.jb51.net".split(":./",[stringsplitoptions]::removeemptyentries) http www pstips net
之前有一个小算法题,移除字符串中相邻的重复的空格。在不考虑效率的前提下,可以使用split先分割,分割后再将得到的元素以指定分隔符拼接。但是拼接用到的join方法,并不属于string对象,而属于string类,也正是下面要讲的。
原文: https://www.jb51.net/string-object-methods.html