Функция длинных подстрок C # - PullRequest
5 голосов
/ 12 марта 2011

У меня есть строка, которая «может» быть длиннее любых простых границ int.

В настоящее время функция string.substring принимает только параметры int в качестве индекса и длины, что мне недостаточно, так как мне нужно longдля типов значений параметров.

Знаете ли вы реализацию длинной функции подстроки?

Или что вы посоветуете мне сделать, чтобы решить эту возможную проблему поиска подстроки с очень длинной строкой?

Спасибо.

Ответы [ 4 ]

7 голосов
/ 12 марта 2011

У меня есть строка, которая «может» быть длиннее любых простых границ int.

Нет, в .NET такой проблемы не будет.Сам класс System.String везде использует свойства индексации и длины Int32.

Может быть, у вас будет массив (char) объемом более 2 ГБ, но об этом позаботятся, вы можете использовать 'длинную' индексацию.

Смежный вопрос: Какова максимально возможная длина строки .NET?

0 голосов
/ 12 марта 2011

Кроме того, обычные алгоритмы подстроки могут не работать в этом масштабе (на самом деле я не знаю, как работает .Substring). Возможно, вы захотите взглянуть на это .

0 голосов
/ 12 марта 2011

Как сказал Хенк Холтерман, System.String использует int32 ....

Но если нужно, используйте unsigned int, который может доходить до 4,300 миллионов: попробуйте uint.

uint stringLength =  4,294,967,295

он не намного выше, чем обычный int

int -> -2 147 483 648 до 2 147 483 647 uint -> 0 до 4 294 967 295

0 голосов
/ 12 марта 2011

Поскольку ответ в ссылке, которую предоставляет Henk, содержит состояния, вы не можете создать объект размером более 2 ГБ в .NET ( 64-разрядная версия также имеет это ограничение ).

Поэтому у вас не может быть такой большой строки, несмотря ни на что. Вам потребуется использовать какой-то алгоритм потоковой передачи, чтобы найти и изолировать интересующие вас данные.

...