如何反转包含希伯来字母和数字的字符串?

时间:2014-11-18 13:17:45

标签: c#

我有一个需要反转的希伯来字符串。

"שורה שלמה בעברית 3/8" וגם נושא חדש בסוגריים (הנושא) וגם מספר בסוגריים (25) וגם נקודה בסוף משפט."

我用这个功能来扭转它

public static string Reverse(string s)
{
    char[] charArray = s.ToCharArray();
    Array.Reverse(charArray);
    return new string(charArray);
}

输出是:

".טפשמ ףוסב הדוקנ םגו )52( םיירגוסב רפסמ םגו )אשונה( םיירגוסב שדח אשונ םגו \"8/3 תירבעב המלש הרוש"

你可以看到希伯来语中的单词成功反转但数字和()相反。

2 个答案:

答案 0 :(得分:1)

 static public string ReverseOnlyHebrew(string str)
    {
        string[] arrSplit;
        if (str != null && str != "")
        {
            arrSplit = Regex.Split(str, "( )|([א-ת]+)");
            str = "";
            int arrlenth = arrSplit.Length - 1;
            for (int i = arrlenth; i >= 0; i--)
            {
                if (arrSplit[i] == " ")
                {
                    str += " ";
                }
                else
                {
                    if (arrSplit[i] != "")
                    {
                        int outInt;
                        if (int.TryParse(arrSplit[i], out outInt))
                        {
                            str += Convert.ToInt32(arrSplit[i]);
                        }
                        else
                        {
                            arrSplit[i] = arrSplit[i].Trim();
                            byte[] codes = System.Text.ASCIIEncoding.Default.GetBytes(arrSplit[i].ToCharArray(), 0, 1);
                            if (codes[0] > 47 && codes[0] < 58 || codes[0] > 64 && codes[0] < 91 || codes[0] > 96 && codes[0] < 123)//EDIT 3.1 reverse just hebrew words                              
                            {
                                str += arrSplit[i].Trim();
                            }
                            else
                            {
                                str += Reverse(arrSplit[i]);
                            }
                        }
                    }
                }
            }
        }
        return str;
    }
        static public string Reverse(string str)
        {
            char[] strArray = str.ToCharArray();
            Array.Reverse(strArray);
            return new string(strArray);
        }

答案 1 :(得分:-1)

public static string Reverse(string t)
    {
        char[] charArray = t.ToCharArray();
        string a = "";
        int last = 0;
        for (int i = 0; i <= charArray.Length-1; i++)
        {

            if (!IsHebrew(charArray[i]))
            {
                List<char> temp = new List<char>();

                for (; last < i; last++)
                {
                    int k = 0;
                    temp.Insert(0,charArray[last]);
                }

                foreach(char g in temp)
                {
                    a += g.ToString();
                }
                a += charArray[i];
                last += 1;
            }
        }

        return a;
    }
    private const char FirstHebChar = (char)1488; //א
    private const char LastHebChar = (char)1514; //ת
    private static bool IsHebrew(char c)
    {
        return c >= FirstHebChar && c <= LastHebChar;
    }