c用两种语言拆分和反转句子

本文关键字:句子 拆分 两种 语言 | 更新日期: 2023-09-27 18:27:06

我有一个这样的句子(希伯来语,RTL):

Şר在这里

现在,当我把这个插入数组时,我得到了:

  1. 阵列[0]=Ş
  2. array[1]=为
  3. array[2]=此处
  4. array[3]=:Şר

现在,因为希伯来语是一种RTL语言,我需要颠倒英文字母,我需要切换位置。注意,我需要注意任何一个句子(这意味着我可以有两个以上的英语单词)。

我如何得到如下结果?

我想也许可以在任何时候用英语单词构建一个新的字符串,反转它并重新构建原始字符串,或者可能在ref字符串中使用。。。


谢谢你的帮助,但我还是有问题!我已经像你说的那样把句子拆分了,我颠倒了数组我得到这个:

在第二步之后,希伯来语的位置就变好了!在第三步中,我再次颠倒希伯来语单词,得到:

我需要转换他们的位置(一对一,正如我所说我可以有一个有很多单词的句子因此,我不明白如何"将数组字符串重新组合在一起"(步骤5)

c用两种语言拆分和反转句子

好吧,如果你把问题分解成几个部分,它会是这样的。您需要:

  1. 把一个句子分成一串字符串
  2. 反转数组
  3. 检测单词是否为希伯来语
  4. 如果不是希伯来语,则需要反转字符串
  5. 现在,您只需要将字符串数组放回一个字符串中,就完成了

编辑:我误解了你的问题。你可以这样做:

    public static string ProcessEnglishHebrewSentence(string sentence)
    {
        var ret = new List<string>();
        string[] words = sentence.Split(' ');
        var curHebrewList = new List<string>();
        var curEnglishList = new List<string>();
        bool curLangIsHebrew=false;
        foreach(var w in words)
        {
            if(IsHebrew(w) && curLangIsHebrew) // we have a word in Hebrew and the last word was in Hebrew too
            {
                curHebrewList.Add(w);
            }
            else if(IsHebrew(w) && !curLangIsHebrew) // we have a word in Hebrew and the last word was in English
            {
                if(curEnglishList.Any())            {
                    curEnglishList.Reverse();
                    ret.AddRange(curEnglishList);
                } // reverse current list of English words and add to List
                curEnglishList = new List<string>(); // create a new empty list for the next series of English words
                curHebrewList.Add(w);
                curLangIsHebrew=true; // set current language to Hebrew
            }
            else if(!IsHebrew(w) && !curLangIsHebrew) // we have a word in English and the last word was in English
            {
                curEnglishList.Add(new String(w.Reverse().ToArray())); // reverse and add it to the current series of English words
            }
            else if(!IsHebrew(w) && curLangIsHebrew) // we have a word in English and the last word was in Hebrew
            {
                if(curHebrewList.Any()) ret.AddRange(curHebrewList); // add current list of Hebrew words to List of Lists
                curHebrewList = new List<string>(); // create a new empty list for the next series of Hebrew words
                curEnglishList.Add(new string(w.Reverse().ToArray()));
                curLangIsHebrew=false; // set current language to English
            }
            else
            {
                throw new Exception("there should be no other case...");
            }
        }
        if(curHebrewList.Any()) ret.AddRange(curHebrewList);
        if(curEnglishList.Any())
        {
            curEnglishList.Reverse();
            ret.AddRange(curEnglishList);
        }
        return ret.Aggregate((a,b) => a + " " + b);
    }

Paolo做了艰苦的工作来计算算法:

  1. 把一个句子分成一串字符串
  2. 反转阵列
  3. 如果一个单词不是希伯来语,则相反
  4. 连接字符串

这里有一个使用LINQ的更优雅的版本:

var result = Sentence
   .Split(' ')
   .Reverse()
   .Select(w => IsHebrew(w) ? w : new String(w.Reverse().ToArray())
   .Join(" ")