.NET метод разделения строк странное поведение - PullRequest
2 голосов
/ 19 сентября 2011

У меня проблема с string.split при использовании .NET 3.5:

Строка для разделения:

dim source as string = "ab|foo|bar|bar|bar-foo|ab|ezrezertr|ghghhjhj|ab|foo|xxx|"
dim result() as string = source.split("ab|")

При использовании в приложении Winforms результат «правильный»:

результат (0): "foo | bar | bar | bar-foo |"

результат (1): "ezrezertr | ghghhjhj |"

результат (2): "foo | xxx |"

И я счастлив!

Когда используется внутри кода ASP.NET, результат:

результат (0): «b | foo | bar | bar | bar-foo |»

результат (1): "b | ezrezertr | ghghhjhj |"

результат (2): "b | foo | xxx |"

Другими словами, функция split избавляется только от 1-го символа строки-разделителя! Кто-то знает почему?

Ответы [ 2 ]

5 голосов
/ 19 сентября 2011

Результаты ASP.NET выглядят так, как будто вы используете Regex.Split вместо String.Split. Строка "ab|" будет интерпретироваться как регулярное выражение для «a», за которым следует «b» или ничего, поэтому просто «a» соответствует.


Позже: Вторая теория :

  • Нет перегрузки String.Split, которая принимает аргумент из одной строки. Единственный аргумент перегрузки принимает массив char.
  • String.Splt(char()) разделит на любой пропущенных символов.
  • VB без Option Strict On неявно преобразует строку в массив символов.

Следовательно, я думаю, что в случае ASP.NET у вас нет option strict on, поэтому theString.Split(anotherString) рассматривается как theString.Split(anotherString.ToCharArray()).

Таким образом, разделение на "b".

Однако это оставляет вопрос о том, как первые случаи действуют как передача строки, но нет перегрузки, принимающей String() без дополнительных параметров (SplitOptions) ...

Резюме: Дополнительные неявные преобразования и поведение Visual Basic, установленные на уровне файла / проекта / языка, могут заставить идентичный код вести себя по-разному.

2 голосов
/ 19 сентября 2011

Если входная строка одинакова, то я почти гарантирую, что метод split консольного приложения и ASP.NET ведут себя одинаково.

Может быть, вывод не отображается правильно?

...