.NET String Split () - PullRequest
       3

.NET String Split ()

5 голосов
/ 21 февраля 2012

Кажется, что оператор 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

Ответы [ 4 ]

9 голосов
/ 21 февраля 2012

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).

5 голосов
/ 21 февраля 2012

.NET метод String.Split имеет две (группы) перегрузок.Первый получает массив символов, а второй - массив строк.На самом деле нет перегрузки, которая получает строку.Первый ведет себя так, как вы описываете, каждый персонаж разделяется по отдельности.Вторая разбивается на целые строки, как вы этого хотите.

Из-за способа, которым PowerShell анализирует параметры, строка, переданная в Split, будет проанализирована как массив символов, и будет вызвана первая перегрузка.Если бы вы могли явно указать, что «46» - это массив, содержащий только одну строку, он должен дать вам желаемое поведение.

1 голос
/ 21 февраля 2012

Основное отличие состоит в том, что оператор -split может принимать строку или шаблон регулярного выражения, а метод Split может принимать только строки. Оператор -split имеет множество опций для настройки своего поведения. Вы можете найти больше информации в документе about_split

0 голосов
/ 27 февраля 2012

Еще одно различие, о котором я не заметил, заключается в том, что строковый метод .split() работает только с одним строковым объектом, для которого вы вызываете метод.

Оператор PowerShell -split примет массив в качестве аргумента и разделит все элементы массива сразу.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...