string template = @"
{
argument1 = ""{0}"";
argument2 = {1};
}";
Run Code Online (Sandbox Code Playgroud)
当我将它格式化为string.Format的常用字符串时,我自然会得到一个异常,即输入字符串的格式不正确.我尝试转义msdn文档中推荐的参数,比如"{{0}}"甚至"{{{0}}}",但我仍然得到相同的异常.关于如何格式化这样一个字符串的任何想法?
谢谢!
PS [edit]我的原始字符串用于生成WCAT场景文件:
string scenarioHeaderTemplate = @"
scenario
{{
name = ""WCAT Scenario"";
warmup = {0};
duration = {1};
cooldown = {2};
default
{
version = HTTP11;
setheader
{
name = ""Connection"";
value = ""keep-alive"";
}
statuscode = 200;
close = ka;
}
}}";
Run Code Online (Sandbox Code Playgroud)
如果我尝试string.Format(scenarioHeaderTemplate,10,10,10),它会抛出;
我有一个压缩的字符串值,我从导入文件中提取.我需要将其格式化为包裹编号,格式如下:##-##-##-###-###.因此,字符串"410151000640"应变为"41-01-51-000-640".我可以使用以下代码执行此操作:
String.Format("{0:##-##-##-###-###}", Convert.ToInt64("410151000640"));
Run Code Online (Sandbox Code Playgroud)
但是,字符串可能不是所有数字; 它可能有一两个字母,因此转换为int将失败.有没有办法在字符串上执行此操作,以便每个字符(无论是数字还是字母)都能正确地符合格式?
我想找到名称以param1开头的结果,并以param2结尾但我的代码不起作用
string wmiQuery = string.Format("SELECT CommandLine FROM Win32_Process WHERE Name LIKE '{0}%' AND Name LIKE '%{1}'", param1, param2);
ManagementObjectSearcher searcher = new ManagementObjectSearcher(wmiQuery);
ManagementObjectCollection retObjectCollection = searcher.Get();
Run Code Online (Sandbox Code Playgroud)
怎么了?
比较
string wmiQuery = string.Format("SELECT CommandLine FROM Win32_Process WHERE Name LIKE '{0}%'", param1);
Run Code Online (Sandbox Code Playgroud)
效果很好
string.Format具有以下方法签名
string.Format(format, params, .., .. , ..);
Run Code Online (Sandbox Code Playgroud)
我想每次传递自定义格式
string custFormat = "Hi {0} ... {n} "; // I only care about numbers here, and want avoid {abdb}
string name = "Foo";
string message = ProcessMessage(custFormat, name);
public string ProcessMessage(custFormat, name)
{
return string.Format(custFormat, name);
}
Run Code Online (Sandbox Code Playgroud)
我想在传递给ProcessMessage之前验证custFormat中的值以避免异常.
我尝试将一行使用String.Format两次的代码迁移到新的.NET Framework 6字符串插值功能,但直到现在我还没有成功.
var result = String.Format(String.Format("{{0:{0}}}{1}",
strFormat, withUnit ? " Kb" : String.Empty),
(double)fileSize / FileSizeConstant.KO);
Run Code Online (Sandbox Code Playgroud)
一个工作的例子可能是:
var result = String.Format(String.Format("{{0:{0}}}{1}",
"N2", " Kb"), 1000000000 / 1048576D);
Run Code Online (Sandbox Code Playgroud)
产量:953,67 Kb
这是可能的还是我们需要在这种特殊情况下使用旧结构?
我认为这个问题的直接答案是"不",但我希望有人写了一个真正的简单库来做这件事(或者我可以做到......呃...)
让我用一个例子展示我正在寻找的东西.假设我有以下内容:
class Person {
string Name {get; set;}
int NumberOfCats {get; set;}
DateTime TimeTheyWillDie {get; set;}
}
Run Code Online (Sandbox Code Playgroud)
我希望能够做到这样的事情:
static void Main() {
var p1 = new Person() {Name="John", NumberOfCats=0, TimeTheyWillDie=DateTime.Today};
var p2 = new Person() {Name="Mary", NumberOfCats=50, TimeTheyWIllDie=DateTime.Max};
var str = String.Format(
"{0:Name} has {0:NumberOfCats} cats and {1:Name} has {1:NumberOfCats} cats. They will die {0:TimeTheyWillDie} and {1:TimeTheyWillDie} respectively
", p1, p2);
Console.WriteLine(str);
}
Run Code Online (Sandbox Code Playgroud)
有没有人知道是否有这样的格式,或者有人写了一个库来做这件事?我知道它不应该太难,但我宁愿不重新实现轮子.
编译器可以访问格式字符串AND所需的类型和参数.所以我假设有一些方法来指示varargs的缺失参数......即使只是一个案例的子集.是否存在eclipse或其他ide表示传递的varargs可能在运行时导致问题?
在我的项目(Java/Play框架)中,我有一个错误处理路由,如果响应是错误代码,则检查来自Web服务的响应,我们显示相应的错误消息,说明用户输入有什么问题,服务检查用户输入有效性.
当用户输入%符号时,由于错误显示逻辑使用,该逻辑会中断
String.format(message, messageArgs);
Run Code Online (Sandbox Code Playgroud)
其中插入了messageArgs介绍它找到%的消息String,如果messageArgs包含%,那么我得到一个异常.
在显示消息之前,我需要清理,转义或以其他方式从用户输入中删除%.
消息:请求的电子邮件地址%s无效messageArgs:orlybg%@gmail.com
有关如何以最简单,最短的方式在Java中执行此操作的任何建议吗?
这是错误日志的一部分
java.util.UnknownFormatConversionException: Conversion = 'i'
at java.util.Formatter$FormatSpecifier.conversion(Formatter.java:2646)
at java.util.Formatter$FormatSpecifier.<init>(Formatter.java:2675)
at java.util.Formatter.parse(Formatter.java:2528)
at java.util.Formatter.format(Formatter.java:2469)
at java.util.Formatter.format(Formatter.java:2423)
at java.lang.String.format(String.java:2797)
at controllers.api.PublicAPI.renderAPIError(PublicAPI.java:176)
at controllers.api.DeviceAPI.setEmailAddress(DeviceAPI.java:736)
at play.mvc.ActionInvoker.invokeWithContinuation(ActionInvoker.java:557)
at play.mvc.ActionInvoker.invoke(ActionInvoker.java:508)
at play.mvc.ActionInvoker.invokeControllerMethod(ActionInvoker.java:484)
at play.mvc.ActionInvoker.invokeControllerMethod(ActionInvoker.java:479)
at play.mvc.ActionInvoker.invoke(ActionInvoker.java:161)
at Invocation.HTTP Request(Play!)
Run Code Online (Sandbox Code Playgroud)
谢谢!
一位前同事写道:
String.Format("{0:#;;} {1:records;no records;record}", rows, rows - 1);
//Rows is a integer value
Run Code Online (Sandbox Code Playgroud)
我读过这些文章
代码项目 - .NET MSDN中的自定义字符串格式
- 自定义数字格式字符串
但我仍然不知道这种格式是如何工作的.显然我可以看到输出,但我不明白这部分{0:#;;}和第二部分.我想做同样的事情来指定年龄(年,年......)
我对这种字符串格式很好奇.有人可以解释这种行为吗?作者不再与我们合作了.
是否有格式选项,以便
>>> '%.1(format)'%2.85
Run Code Online (Sandbox Code Playgroud)
给出'2.8'?
在 Python 2.7 中,'f' 格式四舍五入到最接近的
>>> "{:.0f}".format(2.85)
'3'
>>> "%.0f"%2.85
'3'
>>> "%.1f"%2.85
'2.9'
>>> "%i"%2.85
'2'
Run Code Online (Sandbox Code Playgroud)