c用两种语言拆分和反转句子
本文关键字:句子 拆分 两种 语言 | 更新日期: 2023-09-27 18:27:06
我有一个这样的句子(希伯来语,RTL):
Şר在这里
现在,当我把这个插入数组时,我得到了:
- 阵列[0]=Ş
- array[1]=为
- array[2]=此处
- array[3]=:Şר
现在,因为希伯来语是一种RTL语言,我需要颠倒英文字母,我需要切换位置。注意,我需要注意任何一个句子(这意味着我可以有两个以上的英语单词)。
我如何得到如下结果?
我想也许可以在任何时候用英语单词构建一个新的字符串,反转它并重新构建原始字符串,或者可能在ref字符串中使用。。。
谢谢你的帮助,但我还是有问题!我已经像你说的那样把句子拆分了,我颠倒了数组我得到这个:
在第二步之后,希伯来语的位置就变好了!在第三步中,我再次颠倒希伯来语单词,得到:
我需要转换他们的位置(一对一,正如我所说我可以有一个有很多单词的句子因此,我不明白如何"将数组字符串重新组合在一起"(步骤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做了艰苦的工作来计算算法:
- 把一个句子分成一串字符串
- 反转阵列
- 如果一个单词不是希伯来语,则相反
- 连接字符串
这里有一个使用LINQ的更优雅的版本:
var result = Sentence
.Split(' ')
.Reverse()
.Select(w => IsHebrew(w) ? w : new String(w.Reverse().ToArray())
.Join(" ")