2

我想用希伯来语字符串替换这个占位符。但不幸的是,字符串替换不起作用。看起来在希伯来语字符串中根本找不到占位符字符串。

    [Test]
    public void Fancy_placeholder_should_be_replaced()
    {
        const string input = "(השדה @%1$ קצר מדי (@%2$ תווים לפחות";
        const string expected = "(השדה {0} קצר מדי ({1} תווים לפחות";

        var dummy = input.Replace("%2$@", "{1}");
        dummy = dummy.Replace("%1$@", "{0}");

        Assert.AreEqual(expected, dummy);
    }

我怎样才能在这里进行替换工作?

4

2 回答 2

2

搞乱结果的是从右到左的问题,特别是“@”字符。将您的功能修改为:

public void Fancy_placeholder_should_be_replaced()
    {
        const string input = "(השדה @%1$ קצר מדי (@%2$ תווים לפחות";
        const string expected = "(השדה {0} קצר מדי ({1} תווים לפחות";

        var formatted = input.Replace("@%2$", "{1}");
        formatted = formatted.Replace("@%1$", "{0}");

        bool same2 = expected == formatted;
        Assert.AreEqual(expected, formatted);
    }

还有多田!有用...

于 2013-05-01T07:14:57.217 回答
0

不懂那么多希伯来语,我知道他们从右到左阅读。据推测,%1$不被识别为“希伯来字符”。只是检查dummy.IndexOf("%1$")。它会给你 7,即@右起第一个之后的位置。所以,直接跳到结论:

    var dummy = input.Replace("@%2$", "{1}");
    dummy = dummy.Replace("@%1$", "{0}");
于 2013-05-01T06:51:23.943 回答