【问题标题】:How can I get this string replacement in hebrew to work?我怎样才能在希伯来语中使用这个字符串替换?
【发布时间】:2013-05-01 06:32:28
【问题描述】:

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

    [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);
    }

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

【问题讨论】:

标签: c# .net string replace


【解决方案1】:

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

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);
    }

还有多田!它有效...

【讨论】:

  • @ 不是原因,input.IndexOf("@") 返回 6,这是正确的。相反,input.IndexOf("%1$") 返回 7,在我看来应该返回 -1,因为它是从右到左的,input.IndexOf("$1%") 返回 7 会更一致,因为如果从右到左,这就是序列。我假设 @ 在希伯来语中被普遍接受,而 $,1 和 % 不是,因此从左到右计算,因此 % = 索引 7、1 = 8 和 $ = 9。
  • 实际上,我是一个说希伯来语的人,所有的 '1@%2$' 字符在希伯来语中都很常见,就像在英语中一样......问题是当你输入任何字符时,如您所料,它对齐 rtl,但“@”字符除外。我想这是为了更好地显示电子邮件地址,请看图...如果您尝试从左到右逐个字符地突出显示以下文本,您可以看到一个示例:“1%ש2$@”
  • 嗯,现在这很有意义,所以与 @ 相关的所有内容都将从左到右显示。只是为了满足我的好奇心,电话号码是如何显示的,从左到右还是从右到左?
  • 电话号码和一般的号码从左到右显示。
【解决方案2】:

我不太了解希伯来语,但我知道他们从右到左阅读。 据推测,%1$ 不被识别为“希伯来字符”。只需检查dummy.IndexOf("%1$")。它会给你 7,也就是右边第一个 @ 之后的位置。所以,直接下结论:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-22
    • 2012-02-03
    • 2015-12-02
    • 2023-03-23
    相关资源
    最近更新 更多