我想用希伯来字符串替换这个占位符。 但不幸的是,字符串替换不起作用。看起来在希伯来字符串中根本找不到占位符字符串。
[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);
}
我如何在这里进行更换工作?
答案 0 :(得分: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);
}
tada!它有效...
答案 1 :(得分:0)
不知道希伯来语的语言,我知道他们从右到左阅读。
据推测,%1$
不被视为“希伯来字符”。只需查看dummy.IndexOf("%1$")
即可。它会给你7,这是右边第一个@
之后的位置。所以,只是跳到结论:
var dummy = input.Replace("@%2$", "{1}");
dummy = dummy.Replace("@%1$", "{0}");