Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/24.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
.NET字符串拆分()_.net_String_Text_Powershell - Fatal编程技术网

.NET字符串拆分()

.NET字符串拆分(),.net,string,text,powershell,.net,String,Text,Powershell,似乎PowerShell-split运算符和.NETsplit()方法的作用完全不同 .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

似乎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相同的技术,并将字符串分隔符用作一个实体单元?希望没有正则表达式

这在PowerShell中起作用,使用Split()

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


为了使用
string.Split(string[],StringSplitOptions)
重载,必须以
的方式调用它“123456789”.Split(new[]{“45”},StringSplitOptions.None)
.NET的string.Split方法有两组重载。第一个接收字符数组,第二个接收字符串数组。实际上没有接收字符串的重载。第一个角色的行为与您描述的一样,每个角色都被单独拆分。第二个沿着整个弦分裂,就像你想要的那样


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

关键区别在于
-split
操作符可以接受字符串或正则表达式模式,而split方法只能接受字符串。
-split
操作符有很多选项来调整其行为。您可以在

中找到更多信息另一个我没有看到任何人提到的区别是string
.split()
方法只对调用该方法的单个string对象有效


PowerShell
-split
操作符将数组作为其参数,并同时拆分数组的所有元素。

奇怪!好在我不用Powershell;P
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