有一种简单的方法吗?我找不到任何东西。我是否有义务逐个字符地扫描?
我不希望字符串作为返回,而是位置所以不建议使用SubString。
答案 0 :(得分:10)
是的,你可以。 IndexOf()
方法有an overload that takes a startIndex
参数:
PS C:\> "WordsWordsWords".IndexOf("Words")
0
PS C:\> "WordsWordsWords".IndexOf("Words", 2)
5
在第二个例子中,我们寻找子串的索引" Words"在字符索引2之后开始。
答案 1 :(得分:3)
关于the answer from Mathias R. Jessen的注意事项:
String.IndexOf method实际上是字符串对象的.NET方法。这是因为默认情况下它区分大小写(这对PowerShell来说并不常见):
PS C:\> "WordsWordsWords".IndexOf("words")
-1
您也可以通过将StringComparison
设置为CurrentCultureIgnoreCase
:
PS C:\> "WordsWordsWords".IndexOf("words", [System.StringComparison]::CurrentCultureIgnoreCase)
0
但您也可以考虑Select-String
cmdlet,它为您提供了更多可能性,包括regular expressions:
PS C:\> ("Words words words" | Select-String "words").Matches.Index
0
PS C:\> ("Words words words" | Select-String "words" -AllMatches).Matches.Index
0
6
12
PS C:\> ("Words words words" | Select-String "\w+" -AllMatches).Matches.Index
0
6
12