【问题标题】:String that contains English and Hebrew letters gets messed up after String.Join() - C# .NET在 String.Join() 之后,包含英语和希伯来字母的字符串变得混乱 - C# .NET
【发布时间】:2020-07-12 21:03:08
【问题描述】:

我有一个包含英语和希伯来语字符的字符串:
"Hitachi - היטצ'י:Hitachi – cartel CRT"

第一步:翻转被:隔开的两部分。
预期结果:"Hitachi – cartel CRT:Hitachi - היטצ'י"

下一步:我想连接以下文本:":אגם:עץ תיוק"
最终预期结果:"Hitachi - cartel CRT:Hitachi - אגם:עץ תיוק:היטצ'י"

实际结果: "Hitachi – cartel CRT:Hitachi - היטצ'י:אגם:עץ תיוק"

这是我当前的代码:

string path = "Hitachi - היטצ'י:Hitachi – cartel CRT";
string[] splittedByColonPath = path.Split(':');
Array.Reverse(splittedByColonPath);
List<string> list = new List<string>(splittedByColonPath);
list.Add("אגם:עץ תיוק:");            
string result = String.Join(":", list.ToArray());

关于如何以正确方式重新排列它的任何想法?

【问题讨论】:

  • 你使用什么语言?

标签: string-concatenation register-transfer-level


【解决方案1】:

String.Join 工作正常,字符串正是您想要的。 (如果您愿意,可以编写一些代码来测试这一点,一次打印一个字符,每行一个字符。)问题是,当 显示 它时,所有的希伯来文文本和冒号被视为一个短语,并且由于希伯来语主要是从右到左,这意味着短语中的第一个单词出现在右侧。

根据您想要实现的目标,这可能没问题(例如,如果您将它传递给另一个需要用冒号分隔数据的程序 - 在这种情况下,字符串可能看起来错误,但另一个程序会很好地解释它)。但是,如果您希望它看起来像您期望的那样,则必须强制显示算法将冒号视为从左到右。您可以通过将代码更改为来做到这一点

string result = String.Join("\u200e:"), list.ToArray());

\u200e 是一个从左到右的标记 (LRM),它会导致任何相邻的标点符号都被视为从左到右。

这样做的缺点是任何其他解释数据的程序可能不会期望 LRM 并且可能会被它混淆。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-05-10
    • 1970-01-01
    • 2022-01-26
    • 2018-04-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多