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

3
这是一个字符串:
         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个回答

5
我会稍微扩展一下Lucas的回答。假设你有这个字符串:
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)

会做到这一点。

4

我不确定这个解决方案是否符合您的要求,但如果您插入一个从左到右标记,它是有效的:

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

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接