2015-10-25 4 views
0

Я имею странную проблему с IndexOf функции:IndexOf возвращает -1, когда он должен возвращать 0

"strcat".IndexOf("st") 

возвращенного -1

"strcat".IndexOf("str") 

вернулся

Может ли кто-нибудь объяснить, почему это произошло?

+0

Невозможно воспроизвести это. –

+0

Это (возможно) на самом деле не произошло ... еще раз посмотрим на ваши предположения. –

+0

Я получаю '0' для обоих. – Enigmativity

ответ

5

Это может быть связано с текущей культурой вашей системы. Основываясь на вашем имени, я предположил, что вьетнамцы.

System.Threading.Thread.CurrentThread.CurrentCulture = New Globalization.CultureInfo("vi-VN") 
Dim i1 As Int32 = "strcat".IndexOf("st") 
Dim i2 As Int32 = "strcat".IndexOf("str") 
Dim i3 As Int32 = "strcat".IndexOf("st", System.StringComparison.InvariantCulture) 
Dim i4 As Int32 = "strcat".IndexOf("str", System.StringComparison.InvariantCulture) 

выходы: i1 = -1, i2 = 0, i3 = 0, i4 = 0


Под редакцией по этому адресу вопрос, заданный в разделе комментариев.

Как это происходит? Я не вижу ничего, что изменило бы культуру?

Чтобы ответить на это, вы должны обратиться к документации по методу. см: String.IndexOf Method (String)

Соответствующая информация:

Этот метод выполняет слово (с учетом регистра и культуры чувствительных) поиска с использованием текущей культуры. Поиск начинается с первой позиции символа этого экземпляра и продолжается до последней позиции символа.

У данной культуры есть свои правила для того, что считается «общим знанием/pratice». Вы не должны предполагать, что то, что вы считаете нормальным, является нормальным в другой культуре. Это причина того, что методы, выполняющие сравнения, позволяют указать культуру для определения правил, используемых для сравнения.

Это относится не только к строкам, но и к датам.

Самая известная программирующая головоломка: Проходит ли ваша программа turkey test? Также известна как «проблема турецкого языка». Это термины, которые вы можете исследовать для получения дополнительной информации.

+1

Как это происходит? Я не вижу ничего, что изменило бы культуру? – Sam

+0

@Sam, посмотрите пожалуйста модифицированный ответ. – TnTinMn

+0

Спасибо за доработку. Думаю, с точки зрения ASCII, в чем разница между ST в обеих культурах? Что делает культура Сингапура по-другому? – Sam

Смежные вопросы