特别是在使用String.Format的C#世界中,一切都很常见,通常作为VB.NET开发人员,除非我必须*我不是String.Format,
我更喜欢正常的字符串连接,例如:
V1 = V2 & "test-x" & V3 & "-;"
Run Code Online (Sandbox Code Playgroud)
对我而言,这比这更好:
V1 = String.Format("{0} test-x {1} -;", V2, V3)
Run Code Online (Sandbox Code Playgroud)
我错过了什么吗?或者这仅仅是个人偏好?
使用String.Format的原因(来自答案)(我会尽量保持最新)
**有时我需要动态更改样式或替换东西然后我使用String.Format*
似乎String.Format不会将字符串格式化为输入.我做错了什么,或者这只是本地行为?
输入:0.37
这不起作用.
string x = String.Format("{0:P}", myString)
Run Code Online (Sandbox Code Playgroud)
产量:0.37
这样做.
string x = String.Format("{0:P}", Convert.ToDecimal(myString))
Run Code Online (Sandbox Code Playgroud)
产量:37.00%
我在ASP.NET Datagrid中使用DataBinder.Eval表达式,但我认为这个问题一般适用于.NET中的String格式.客户已请求如果字符串的值为0,则不应显示该字符串.我有以下黑客来完成这个:
<%# IIf(DataBinder.Eval(Container.DataItem, "MSDWhole").Trim = "0", "",
DataBinder.Eval(Container.DataItem, "MSDWhole", "{0:N0}")) %>
Run Code Online (Sandbox Code Playgroud)
我想更改{0:N0}格式表达式,以便我可以消除IIf语句,但找不到任何有效的.
我们使用log4net库和字符串格式方法调用编写了数千条不同的日志消息.
这样做的一个问题是,如果字符串格式参数(如{0},{1},{2}具有正确的方法参数计数),则仅在运行时才会出现错误.
许多这些方法仅在自动测试期间很少或从未发生的错误条件下调用.
那么是否有任何工具可以扫描所有C#代码并通知任何字符串格式问题?
注意:我在静态代码分析中看到了许多其他问题,这些问题看似重复,但在查看其中一些工具后,它们似乎无法处理这种特定情况.
如果没有什么真正的好处,我们将在内部编写此工具.
基本上我意识到我的应用程序使用逗号而不是小数,我从不想允许这个.谁知道我怎么纠正?我无法通过谷歌找到一个强制小数的东西,它只是强迫逗号.
return String.Format("{0}f, {1}f, {2}f, {3}f, {4}f, {5}f, {6}f, {7}f, {8}f, {9}f, {10}f, {11}f, {12}f, {13}f, {14}f, {15}f", M.M11, M.M12, M.M13, M.M14, M.M21, M.M22, M.M23, M.M24, M.M31, M.M32, M.M33, M.M34, M.OffsetX, M.OffsetY, M.OffsetZ, M.M44);
Run Code Online (Sandbox Code Playgroud) 是否可以使用Python的str.format(key=value)语法来仅替换某些键.
考虑这个例子:
my_string = 'Hello {name}, my name is {my_name}!'
my_string = my_string.format(name='minerz029')
Run Code Online (Sandbox Code Playgroud)
返回
KeyError: 'my_name'
Run Code Online (Sandbox Code Playgroud)
有没有办法实现这个目标?
给出以下C#代码:
var dt = DateTime.Now;
Console.WriteLine("{0:MM/dd/yy} ... {1}", dt, string.Format("{0:MM/dd/yy}", dt));
Run Code Online (Sandbox Code Playgroud)
...当短日期(在Windows 7下Control Panel -> Region and Language -> Additonal Settings -> Date)设置为美国标准" M/d/yyyy,"时,我得到:
06/17/14 ... 06/17/14
Run Code Online (Sandbox Code Playgroud)
但是,当我将短日期更改为" ddd dd MMM yyyy,"时,我得到了这个:
06/17/14 ... 06 17 14
Run Code Online (Sandbox Code Playgroud)
我的印象是,Console.WriteLine并且string.Format始终将字符串格式化的DateTime值相同.这种差异的解释是什么?
编辑:看起来这只发生在标准的单元测试输出(Visual Studio),这是我最初看到的问题.当代码在控制台应用程序中执行时,输出为06 17 14 ... 06 17 14.
是否有办法打破一行代码,以便尽管在java中的新行上它被读取为连续的?
public String toString() {
return String.format("BankAccount[owner: %s, balance: %2$.2f,\
interest rate: %3$.2f,", myCustomerName, myAccountBalance, myIntrestRate);
}
Run Code Online (Sandbox Code Playgroud)
上面的代码,当我在一行上执行所有操作时,一切都很有效,但是当我尝试在多行上执行此操作时,它不起作用.
在python中,我知道你使用\来开始在新行上键入,但在执行时打印为一行.
Python中的一个例子来澄清.在python中,这将使用反斜杠或()在一行上打印:
print('Oh, youre sure to do that, said the Cat,\
if you only walk long enough.')
Run Code Online (Sandbox Code Playgroud)
用户会将此视为:
Oh, youre sure to do that, said the Cat, if you only walk long enough.
Run Code Online (Sandbox Code Playgroud)
在java中有类似的方法吗?谢谢!
根据文档,String.Format将抛出一个FormatExceptionif(A)格式字符串无效或(B)格式字符串包含在args数组中找不到的索引.
我希望能够确定任何字符串和参数数组中哪些(如果有)这些条件失败.
有什么能帮我的吗?谢谢!
我面临着一个奇怪的问题String.Format()。我需要格式化两个带有前导零的十六进制数字以填充最多 8 位数字。但是,它仅适用于第一个参数 ( {0:X8})。对于第二个参数 ( {1:X8}),仅打印“X8”。
这是我的代码:
public struct DataDirectory
{
public uint VirtualAddress
{
get;
internal set;
}
public uint Size
{
get;
internal set;
}
public override string ToString()
{
return String.Format("{{VirtualAddress=0x{0:X8},Size=0x{1:X8}}}", VirtualAddress, Size);
}
}
Run Code Online (Sandbox Code Playgroud)
调试器输出打印以下内容:

编辑:如果我删除格式字符串开头和结尾处的大括号,它似乎可以工作,但随后我会丢失返回的字符串中的大括号ToString()(调试器仍将它们添加到 QuickWatch 窗口中):
return String.Format("VirtualAddress=0x{0:X8},Size=0x{1:X8}", VirtualAddress, Size);
Run Code Online (Sandbox Code Playgroud)
是否可以用 格式化两个十六进制数String.Format()?
string.format ×10
.net ×5
c# ×5
string ×2
coding-style ×1
datetime ×1
format ×1
formatting ×1
java ×1
python ×1