String 哪一个更有效:';更换';或';子字符串';?
我经常发现我可以使用String 哪一个更有效:';更换';或';子字符串';?,string,powershell,replace,substring,String,Powershell,Replace,Substring,我经常发现我可以使用Substring或replace对字符串执行所需的操作 例如:要获取本地repo的远程GitHub URL: (git-remote-get-url-origin)。替换('.git','') 很明显,一条线是额外的,但它值得吗 如果有的话,是否有技术上的理由使用一种方法而不是另一种方法?当然,这是一种偏好。这也是情境性的,你最好试着把工具放在工具箱里,试着学习什么时候最好使用哪个工具。我认为这在很大程度上就是你的问题所在 有了两个可行的解决方案,这个特殊的例子就不那么
Substring
或replace
对字符串执行所需的操作
例如:要获取本地repo的远程GitHub URL:
(git-remote-get-url-origin)。替换('.git','')
如果有的话,是否有技术上的理由使用一种方法而不是另一种方法?当然,这是一种偏好。这也是情境性的,你最好试着把工具放在工具箱里,试着学习什么时候最好使用哪个工具。我认为这在很大程度上就是你的问题所在 有了两个可行的解决方案,这个特殊的例子就不那么令人担心了。但是,我要指出,
.Replace()
与许多其他底层.Net字符串方法一样,都是区分大小写的.Substring()
处理索引不是,但在您的示例中,您依赖于.IndexOf()`默认情况下区分大小写
根据mklement0的有用评论:
.IndexOf()
&LastIndexOf()
可以使用其他重载设置为不区分大小写,如:
"SomEthing".IndexOf("e", [System.StringComparison]::OrdinalIgnoreCase)
注意:.Net 4.x及以下版本中的.Replace()
没有区分大小写的模式,因此任何版本的Windows PowerShell也不会有这种模式。Net core确实有此选项,因此它在PowerShell 6+中可用
对于.Replace()
和.Split()
来说,使用PowerShell native-Replace
和-Split
更安全一些。这不仅在默认情况下不区分大小写,而且还使您免受.Net方法中可能发生的更改的影响,就像.Split()
从.Net到.Net Core的重载首选项所发生的情况一样
也就是说,作为如何做出此类决策的示例,.Net方法更快。因此,在某些情况下,您可能会选择通过PowerShell本机操作符使用它们。请注意注意注意事项,包括但不限于此处讨论的事项
注意:
.StartsWith()
&.EndsWith()
也区分大小写,因此我们可以使用-match“^string”
或-like“string*”
检查这些条件。同样,这些只是您如何在两种不同技术之间做出选择的其他示例。您好。不幸的是,在我看来,这就像你说的:“个人偏好”。这是一个奇妙的答案,我觉得你提供了如何客观地与主观地做出决定的例子。我感谢你的反馈。很高兴知道我在社区中产生了影响。谢谢你的更新,史蒂文。快速术语说明:.NET Framework是仅限Windows的.NET旧版,Windows PowerShell是在其上构建的,并且将保留在其上。4.8是最新和最新发布的版本。NET Core是版本3.1之前的独立、跨平台版本的名称。从5.0开始,名称的核心部分被删除,就像在v7发布时PowerShell(Core)的情况一样。因此,根据定义,任何以v5开头的.NET版本都是指跨平台版本(与任何以v6开头的PowerShell版本一样)。要查看特定的.NET版本是给定PowerShell版本的基础,请运行[System.Runtime.InteropServices.RuntimeInformation]::FrameworkDescription
。好的,我进一步改进了更新。谢谢你提供的信息.NET5把我扔了出去。我想知道为什么Windows PowerShell需求文档没有提到它。注意:[System.Runtime.InteropServices.RuntimeInformation]::FrameworkDescription
在5.1中似乎不起作用。
"SomEthing".IndexOf("e", [System.StringComparison]::OrdinalIgnoreCase)