1

我们需要显示带有星号的银行路由/帐户数据,最后 4 个数字除外。直到我在单元测试中发现这一点之前,这似乎很简单:

string.Format("{0:****1234}",61101234)
正确显示为:“****1234”

string.Format("{0:****0052}",16000052)
显示不正确(由于零??):“****1600005252”

如果您在 C# 中使用以下内容,它可以正常工作,但我无法使用它,因为当您设置不带花括号的显示格式时,DevExpress 会自动将其包装为“{0: ... }”:

string.Format("****0052",16000052)

谁能想到一种让这种格式在大括号内正常工作的方法(传入完整的 8 位数字)?

更新:上面的 string.format 只是测试我要解决的问题的一种方式。这不是完成的代码。我必须将大括号内的字符串格式传递给 DevExpress,以便正确格式化路由号码。

4

2 回答 2

1

很遗憾您没有包含构建格式字符串的代码。让格式字符串以看起来像你的方式依赖于数据是非常奇怪的。

不会尝试在格式字符串中执行此操作;相反,我会编写一个将信用卡号转换为“模糊”字符串形式的方法,很可能只是使用Substring字符串连接。例如:

public static string ObscureFirstFourCharacters(string input)
{
    // TODO: Argument validation
    return "****" + input.Substring(4);
}

(不清楚你的信用卡号的数据类型是什么。如果是数字类型,需要先转成字符串,需要注意最后得到一个固定大小的字符串,左填充零。)

于 2013-01-31T17:56:07.273 回答
0

我想你正在寻找这样的东西:

string.Format("{0:****0000}", 16000052);

但是我还没有看到像这样的 * 内联。如果不知道更好,我可能会这样做:

string.Format("{0}{1}", "****", str.Substring(str.Length-4, 4);

如果我知道长度,甚至可以放弃格式调用。

这些方法值得一读:用 *? 屏蔽掉字符串的前 12 个字符?

正如您在评论中提到的那样,这也应该有效:

string.Format("{0:****####}", 16000052);

不同之处在于,如果没有数字,使用 0 将显示零,# 不会。在你的情况下应该没有实际意义。

如果由于某种原因您想打印文字零,请使用:

string.Format("{0:****\0\052}", 16000052);

但请注意,这根本不会对您的输入做任何事情。

于 2013-01-31T18:15:41.723 回答