【问题标题】:.NET String Split().NET 字符串拆分()
【发布时间】:2012-03-11 11:16:47
【问题描述】:

看来 PowerShell -split 运算符和 .NET Split() 方法的行为完全不同。

.NET 将分隔符字符串视为字符数组。

$str = "123456789"
Write-Host ".NET Split(): "
$lines = $str.Split("46")
Write-Host "Count: $($lines.Length)"
$lines

$str = "123456789"
Write-Host "-split operator: "
$lines = $str -split "46"
Write-Host "Count: $($lines.Length)"
$lines

输出:

.NET Split():
Count: 3
123
5
789


-split operator:
Count: 1
123456789

有没有办法让 .NET 应用程序使用与 PowerShell 相同的技术,并将字符串分隔符用作一个实体单元?希望没有 RegEx。

这在 PowerShell 中工作,使用 Split():

Write-Host "Divided by 46:"
"123456789".Split([string[]]  "46", [StringSplitOptions]::None)

Write-Host "`n`nDivided by 45:"
"123456789".Split([string[]]  "45", [StringSplitOptions]::None)


Divided by 46:
123456789


Divided by 45:
123
6789

【问题讨论】:

  • 奇怪!好在我不使用 Powershell ;p

标签: .net string text powershell


【解决方案1】:

http://msdn.microsoft.com/en-us/library/system.string.split.aspx

当您调用string.Split(string) 时,它使用string.Split(char[]) 重载(因为string 可以转换为char[],但不能转换为string[])。

为了使用string.Split(string[], StringSplitOptions)重载,你必须以"123456789".Split(new[] { "45" }, StringSplitOptions.None)的方式调用它。

【讨论】:

    【解决方案2】:

    .NET 的 String.Split 方法有两个(组)重载。第一个接收一个字符数组,第二个接收一个字符串数组。实际上没有接收字符串的重载。第一个的行为就像你描述的那样,每个角色都被单独分割。第二个沿着整个字符串拆分,就像你想要的那样。

    由于 PowerShell 解析参数的方式,传递给 Split 的字符串将被解析为 char 数组,并调用第一个重载。如果您可以明确指定“46”是一个仅包含一个字符串的数组,它应该会给您想要的行为。

    【讨论】:

      【解决方案3】:

      主要区别在于-split 运算符可以接受字符串或正则表达式模式,而Split 方法只能接受字符串。 -split 运算符有很多选项来调整其行为。您可以在the about_split document找到更多信息

      【讨论】:

        【解决方案4】:

        我没有看到任何人提到的另一个区别是字符串.split() 方法仅适用于您正在调用该方法的单个字符串对象。

        PowerShell -split 运算符将一个数组作为其参数,并一次拆分数组的所有元素。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2010-10-28
          • 2014-05-27
          • 1970-01-01
          相关资源
          最近更新 更多