在C#中替换包含波斯语和英语字母的字符串

时间:2014-08-02 18:42:51

标签: c# string replace

这是字符串:

         str="[@PEYear]/ف/[@POOL]"

我想根据这个结构替换它:

        if (str.Contains("[@PEYear]"))
            str = str.Replace("[@PEYear]", "1393");
        if (str.Contains("[@POOL]"))
            str = str.Replace("[@POOL]", "7");

结果是:1393 /ف/ 7

但我需要:1393然后是ف然后是7(即使我不能在这里打字:P)

我该怎么做?

2 个答案:

答案 0 :(得分:5)

我会稍微谈谈卢卡斯的回答。假设你有这个字符串:

String str = "1393" + "/" + "ف" + "/" + "&"

“&” =“7”,因为stackoverflow编辑窗口在有数字时自动校正(尝试用7代替上面的&)。评估结果为“1393 /ف/ 7”。

这是因为字符串连接功能在遇到从右到左的字符时,会将其余字符附加到此字符的左侧。因此,由于此字符串有8个字符,第6个字符是RTL,因此字符是有序的(如果从零开始)01234765。

现在这个(注意我现在可以输入7而不会被自动修正):

String str = "1393" + "/" + "ف" + "\u200e" + "/" + "7"

评估为“1393 /ف/ 7”,这是你想要的。因此,如果您正在接收字符串,因此无法直接在代码中修改它,则可以使用Substring方法操作传入字符串以插入\ u200e字符。在这个字符串的情况下:

str = str.Substring(0,6) + "\u200e" + str.Substring(6,2)

会做到这一点。

答案 1 :(得分:4)

我不知道这个解决方案是否可以为您所接受,但是如果您插入left-to-right标记就可以了:

var str = "[@PEYear]/ف\u200E/[@POOL]";

这会强制字符串的其余部分从左到右。