Почему Джулия дает мне ошибку StringIndex? - PullRequest
5 голосов
/ 06 апреля 2020

Я получаю ошибку StringIndex для одной конкретной строки из 10000, которую я обрабатываю. Я действительно не знаю, в чем проблема с этой строкой. Я думаю, что это, вероятно, вопрос специального характера.

Если я println строку, затем присвоить ее txt, а затем передать txt в функцию, я не получаю ошибку. Я немного сбит с толку.

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

Ответы [ 2 ]

4 голосов
/ 06 апреля 2020

Просто расширить. Детали того, как String представлена ​​в Julia, объясняются в руководстве Julia .

. Вы можете использовать eachindex, чтобы получить итератор действительных индексов в String. Причина, по которой это итератор, заключается в том, что вы не можете эффективно (т.е. за O (1) раз) найти индекс i-го символа в строке. Однако вы можете использовать функцию isascii на String, чтобы проверить, состоит ли он только из символов ASCII (в этом случае байтовые и символьные индексы совпадают).

Также, если вам нужно получить некоторые для указания символа c в строке обычно требуется более одного символа, в этом случае полезны функции first, last и chop (на самом деле last(first(s, n)) дает вам символ в позиции n; хотя это не самый эффективный способ - итерация eachindex будет выделять меньше).

4 голосов
/ 06 апреля 2020

В Julia строки индексируются байтами, а не символами. Вы должны использовать for c in str, а не пытаться индексировать вручную.

...