Как преобразовать числа хинди ( २०७४) в числовое значение в C#?
У меня есть большая группа чисел хинди, которые я хочу преобразовать в числовые значения, но я не знаю, как их преобразовать. Пожалуйста, предложите мне подходящий способ добиться этого.Примечание Пожалуйста, не предлагайте мне заменить метод.
например. преобразовать это число equivalent в эквивалент 2074
1 ответ
Я считаю, что это то, что вам нужно, но имейте в виду, что этот код написан кем-то, кто не говорит на хинди, не читает хинди или не знает хинди.
Я нашел цифры на странице википедии, но я абсолютно не знаю, что я делаю.
Страница Google (которую я обнаружил, просто набрав в поиске отдельные цифры из исходной строки вопроса), показывает следующее:
- Цифры от 0 до 9
०१२३४५६७८९
- Я нажал на ссылку и использовал последний символ URL в качестве цифры
- Обратите внимание, что 4 должно быть получено как вторая цифра 14, и, похоже, в этой ссылке также имеется суффикс неоднозначности
- Они имеют кодовые точки Unicode в диапазоне от 2406 до 2415, в этом порядке
- Двузначные числа следуют за системой до тройника, так что, похоже, это просто 10-значная цифровая система, использующая разные кодовые точки
- Но учтите, что примеров для меня слишком мало, чтобы быть абсолютно уверенным, что это верно для всех чисел
Если кто-то найдет ответ в этом ответе, я его опущу, но не стесняйтесь сначала взять весь код, если вы считаете, что его можно улучшить.
Также имейте в виду, что ФП явно попросил метод без замены. Все это, вероятно, может быть написано в единственном числе с этим, но так как это не кажется приемлемым ответом, то мы здесь.
С учетом всего вышесказанного, вот версия без замены строки, которая имитирует базовый числовой анализ с использованием различных символов:
Примечание: здесь имеется около 7 тонн обработки ошибок, таких как пустые строки и т. Д.
public static bool TryParseHindiToInt32(string text, out int value)
{
const int codePointForZero = 2406;
const int codePointForNine = codePointForZero + 9;
int sign = +1;
int index = 0;
if (index < text.Length && text[index] == '-') // todo: hindi minus?
{
index++;
sign = -1;
}
value = 0;
while (index < text.Length)
{
char c = text[index];
if (c < codePointForZero || c > codePointForNine)
{
value = 0;
return false;
}
if ((uint)value > 214748364u)
{
value = 0;
return false;
}
value *= 10;
value += (c - codePointForZero);
index++;
}
value *= sign;
return true;
}
Тестовое задание:
string digits = "२०७४";
TryParseHindiToInt32(digits, out int i);
Console.WriteLine(i);
Выходы:
2074