Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/powershell/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
String 哪一个更有效:';更换';或';子字符串';?_String_Powershell_Replace_Substring - Fatal编程技术网

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)