конвертировать арабский числовой в английский - PullRequest
4 голосов
/ 20 марта 2012

Я ищу способ преобразовать арабскую числовую строку "٠١٢٣٤٥٦٧٨٩" в английский числовая строка "0123456789"

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
       dim Anum as string ="٠١٢٣٤٥٦٧٨٩"
       dim Enum as string =get_egnlishNum(Anum)
End Sub

private function get_egnlishNum(byval _Anum as string) as string

''   converting code

end function

Ответы [ 4 ]

3 голосов
/ 20 марта 2012

Вы ищете метод GetNumericValue типа char, который преобразует любой числовой символ Юникода в двойной.Например:

double two = char.GetNumericValue('٢');
Console.WriteLine(two); // prints 2

Для вашего примера:

static string ArabicToWestern(string input)
{
    StringBuilder western = new StringBuilder();
    foreach(char num in input)
    {
        western.Append(char.GetNumericValue(num));
    }
    return western.ToString();
}

Изменить в соответствии с вашими потребностями.

VB.NET:

Private Shared Function ArabicToWestern(ByVal input As String) As String
    Dim western As StringBuilder = New StringBuilder
    For Each num As Char In input
        western.Append(Char.GetNumericValue(num))
    Next
    Return western.ToString
End Function
2 голосов
/ 20 марта 2012

Это одно из решений.

Function Convert(ByVal input As String) As String
    Dim source = "٠١٢٣٤٥٦٧٨٩"
    Dim target = "0123456789"
    Dim sb As New StringBuilder()
    For Each el in Input
        sb.Append(target(source.IndexOf(el)))
    Next
    Return sb.ToString
End Function

РЕДАКТИРОВАТЬ

Я пытался найти более "родные" способы.Я обнаружил свойство NativeDigits NumberFormatInfo class

Это был мой тестовый код, но он не удался.Но это может быть хорошей отправной точкой.

        Dim source = "١٢٣٤٥٦٧٨٩"
        Dim result As Integer
        Dim numInfo As new NumberFormatInfo()
        numInfo.NativeDigits = New String() { "٠", "١", "٢", "٣", "٤", "٥", "٦", "٧", "٨", "٩" }
        Int32.TryParse(source, NumberStyles.Any, numInfo, result)
1 голос
/ 21 марта 2012

Вы можете просто заменить арабские символы на западные версии:

Dim arabicDigits = "٠١٢٣٤٥٦٧٨٩".ToCharArray
Dim s = "‏٠٦٦٢٧٣٩٦عدد النقاط هي ٩٩٣٩٣٥"

For i = 0 To arabicDigits.Length - 1
    s = s.Replace(arabicDigits(i), i.ToString)
Next

s теперь содержит "06627396 عدد النقاط هي 993935"

0 голосов
/ 29 апреля 2017
Dim arabicDigits = "٠١٢٣٤٥٦٧٨٩".ToCharArray
      dim i as integer=0
For i = 0 To anum.Length - 1
select case arabicDigits(i)
case "٠" 
Replace(arabicDigits(i),"0")
case "١"
Replace(arabicDigits(i),"1")
case "٢"
Replace(arabicDigits(i),"2")
case "٣"
Replace(arabicDigits(i),"3")
case "٤"
Replace(arabicDigits(i),"4")
case "٥"
Replace(arabicDigits(i),"5")
case "٦"
Replace(arabicDigits(i),"6")
case "٧"
Replace(arabicDigits(i),"7")
case "٨"
Replace(arabicDigits(i),"8")
case "٩"
Replace(arabicDigits(i),"9")
i=i+1

endselect
End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...