我正在寻找一个很好的JavaScript等价的C/PHP printf()或C#/ Java程序员String.Format()(IFormatProvider对于.NET).
我的基本要求是现在有一千个数字分隔符格式,但处理许多组合(包括日期)的东西会很好.
我意识到Microsoft的Ajax库提供了一个版本String.Format(),但我们不希望该框架的整个开销.
String.format在Java中使用和字符串连接之间是否存在明显的差异?
我倾向于使用,String.format但偶尔会滑倒并使用concat.我想知道一个人是否比另一个好.
我看到它的方式,String.format给你"格式化"字符串更多的权力; 和连接意味着您不必担心意外地添加额外的%s或丢失一个%s.
String.format 也更短.
哪一个更具可读性取决于你的头部如何工作.
我想要的是这样的:
String.Format("Value: {0:%%}.", 0.8526)
Run Code Online (Sandbox Code Playgroud)
%%是格式提供者或我正在寻找的任何东西.应该结果:Value: %85.26..
我基本上需要它用于wpf绑定,但首先让我们解决一般的格式问题:
<TextBlock Text="{Binding Percent, StringFormat=%%}" />
Run Code Online (Sandbox Code Playgroud) 我正在尝试将一些JavaScript代码从MicrosoftAjax移动到JQuery.我使用流行的.net方法的MicrosoftAjax中的JavaScript等价物,例如String.format(),String.startsWith()等.在jQuery中它们是否等同于它们?
假设您要输出或连接字符串.您更喜欢以下哪种款式?
var p = new { FirstName = "Bill", LastName = "Gates" };
Console.WriteLine("{0} {1}", p.FirstName, p.LastName);
Console.WriteLine(p.FirstName + " " + p.LastName);
你更喜欢使用格式还是简单地连接字符串?什么是你最喜欢的?其中一个伤害了你的眼睛吗?
你有任何理性的论据来使用一个而不是另一个吗?
我会去第二个.
假设我在C#中有一个stringbuilder来执行此操作:
StringBuilder sb = new StringBuilder();
string cat = "cat";
sb.Append("the ").Append(cat).(" in the hat");
string s = sb.ToString();
Run Code Online (Sandbox Code Playgroud)
那将是有效的或更高效的:
string cat = "cat";
string s = String.Format("The {0} in the hat", cat);
Run Code Online (Sandbox Code Playgroud)
如果是这样,为什么?
编辑
在一些有趣的答案之后,我意识到我可能应该对我的要求更加清楚.我没有那么多要求连接字符串哪个更快,但是将一个字符串注入另一个字符串更快.
在上面两种情况下,我想将一个或多个字符串注入预定义模板字符串的中间.
对困惑感到抱歉
例如,%11.2lf在C++中变成%11.2f了Java.长格式怎么样?
在下面的代码中,为什么这两个string.Format调用的行为方式不一样?在第一个中,没有抛出任何异常,但在第二个ArgumentNullException抛出了一个异常.
static void Main(string[] args)
{
Exception e = null;
string msgOne = string.Format("An exception occurred: {0}", e);
string msgTwo = string.Format("Another exception occurred: {0}", null);
}
Run Code Online (Sandbox Code Playgroud)
有人可以帮我理解两者的区别吗?
我可以使用String.Format()填充任意字符的某个字符串吗?
Console.WriteLine("->{0,18}<-", "hello");
Console.WriteLine("->{0,-18}<-", "hello");
returns
-> hello<-
->hello <-
Run Code Online (Sandbox Code Playgroud)
我现在希望空格是一个任意字符.我不能用padLeft或padRight做的原因是因为我希望能够在不同的地方/时间构造格式字符串,然后实际执行格式化.
--EDIT--
看到我的问题似乎没有现成的解决方案我想出了这个(在编码之前的思考之后)--
EDIT2--
我需要一些更复杂的场景所以我选择了Think Before Coding的第二个建议
[TestMethod]
public void PaddedStringShouldPadLeft() {
string result = string.Format(new PaddedStringFormatInfo(), "->{0:20:x} {1}<-", "Hello", "World");
string expected = "->xxxxxxxxxxxxxxxHello World<-";
Assert.AreEqual(result, expected);
}
[TestMethod]
public void PaddedStringShouldPadRight()
{
string result = string.Format(new PaddedStringFormatInfo(), "->{0} {1:-20:x}<-", "Hello", "World");
string expected = "->Hello Worldxxxxxxxxxxxxxxx<-";
Assert.AreEqual(result, expected);
}
[TestMethod]
public void ShouldPadLeftThenRight()
{
string result = string.Format(new PaddedStringFormatInfo(), "->{0:10:L} {1:-10:R}<-", "Hello", "World");
string expected …Run Code Online (Sandbox Code Playgroud) 我在Java中使用String.format()试图模拟C中可用的printf()控制通道.我理解如何指定字符串应该放在一个需要20个字符的字段中,5,2 ... 3位小数,2位等.但是,字符串在其字段中右对齐打印.
如何左对齐字符串?
这是一个可能的输出示例,我想修改为左对齐EXECUTING和CREATED它们的字段.
Process PID: 25 Status: ----------- EXECUTING
Process PID: 36 Status: READY-SUSPENDED
Process PID: 4 Status: ---------------- CREATED
Run Code Online (Sandbox Code Playgroud)
*注意:将' - '视为空白区域
string.format ×10
c# ×5
java ×3
string ×3
javascript ×2
.net ×1
alignment ×1
coding-style ×1
decimal ×1
formatting ×1
jquery ×1
padding ×1
performance ×1
printf ×1
vb.net ×1