标签: string-formatting

C#String.Format,带有Curly Bracket in string

可能重复:
在String.Format中转义大括号'{'

c#有一个String.Format方法,允许您格式化字符串,但是使用标记插入params {0} {1}

我试图创建一个简单的json字符串,需要大括号在字符串中,因此它打破了格式化程序

String.Format("{ foo:'{0}', bar:'{1}' }", foo, bar);
Run Code Online (Sandbox Code Playgroud)

在括号之前添加一个逃脱没有帮助

抛出一个异常,说我的字符串格式不正确,有人知道怎么解决这个问题吗?

c# string-formatting curly-braces

22
推荐指数
2
解决办法
2万
查看次数

多字符串格式

给定ints 的字典,我正在尝试使用每个数字格式化字符串,以及项目的复数形式.

样本输入dict:

data = {'tree': 1, 'bush': 2, 'flower': 3, 'cactus': 0}
Run Code Online (Sandbox Code Playgroud)

样本输出str:

'My garden has 1 tree, 2 bushes, 3 flowers, and 0 cacti'
Run Code Online (Sandbox Code Playgroud)

它需要使用任意格式的字符串.

我提出的最佳解决方案是PluralItem存储两个属性的类n(原始值),s('s'如果是复数''则为字符串,否则为空字符串).对不同的复数方法进行了分类

class PluralItem(object):
    def __init__(self, num):
        self.n = num
        self._get_s()
    def _get_s(self):
        self.s = '' if self.n == 1 else 's'

class PluralES(PluralItem):
    def _get_s(self):
        self.s = 's' if self.n == 1 else 'es'

class PluralI(PluralItem):
    def …
Run Code Online (Sandbox Code Playgroud)

python string customization string-formatting

22
推荐指数
4
解决办法
2万
查看次数

使用Python中的format()方法打印布尔值True/False

我试图打印布尔表达式的真值表.在这样做时,我偶然发现了以下情况:

>>> format(True, "") # shows True in a string representation, same as str(True)
'True'
>>> format(True, "^") # centers True in the middle of the output string
'1'
Run Code Online (Sandbox Code Playgroud)

只要指定格式说明符,就format()转换True1.我知道这bool是一个子类int,因此True评估为1:

>>> format(True, "d") # shows True in a decimal format
'1'
Run Code Online (Sandbox Code Playgroud)

但是,为什么不使用格式说明符的变化'True',以1在第一个例子?

我转向文档澄清.它唯一说的是:

一般惯例是,空格式字符串("")产生的结果与调用str()该值时的结果相同.非空格式字符串通常会修改结果.

因此,当您使用格式说明符时,字符串会被修改.但是,为什么从变化True1,如果对准运营商(例如^)被指定?

python string.format boolean string-formatting python-2.7

22
推荐指数
1
解决办法
2万
查看次数

在字符串插值中格式化破折号

我刚刚在C#6.0中查看了新的字符串插值功能(有关详细信息,请参阅Roslyn语言功能页面).使用当前语法(预计会改变),你可以做这样的事情(例子来自我刚才写的博客文章):

var dob2 = "Customer \{customer.IdNo} was born on \{customer.DateOfBirth:yyyyMdd}";
Run Code Online (Sandbox Code Playgroud)

但是,我似乎无法在格式化部分中包含短划线,例如:

var dob2 = "Customer \{customer.IdNo} was born on \{customer.DateOfBirth:yyyy-M-dd}";
Run Code Online (Sandbox Code Playgroud)

如果我这样做,我会收到错误:

错误CS1056意外字符' - 'StringInterpolation Program.cs 21

有什么方法可以让破折号在格式化部分工作吗?我知道我可以使用string.Format(),但我想看看它是否可以用字符串插值完成,就像练习一样.

编辑:因为似乎没有人知道我在说什么,请看关于这个主题的博客文章,看看它应该如何工作.

c# string-formatting string-interpolation c#-6.0

22
推荐指数
2
解决办法
8723
查看次数

如何将格式化字符串附加到现有String?

使用format!,我可以创建一个String格式字符串,但如果我已经有一个String我想要附加的内容呢?我想避免分配第二个字符串只是为了复制它并丢弃分配.

let s = "hello ".to_string();
append!(s, "{}", 5); // Doesn't exist
Run Code Online (Sandbox Code Playgroud)

与C/C++相当的近似值snprintf.

string-formatting rust

22
推荐指数
1
解决办法
1487
查看次数

正确的Javascript Date.parse(...)格式字符串?

什么是文化不变的构造字符串的方式,以便Javascript Date()构造函数可以解析它并创建正确的日期对象?

我试过这些格式字符串不起作用(使用C#生成字符串):

clientDate.ToString();
// gives: "11/05/2009 17:35:23 +00:00"

clientDate.ToString("MMM' 'dd', 'yyyy' 'h':'mm':'ss' 'tt");
// works on an English server
// but on a French server, gives: "mai 11, 2009 5:35:23"
// Javascript won't parse that.

clientDate.ToString("MM'-'dd'-'yyyy' 'HH':'mm':'ss")
// gives: 05-11-2009 17:35:23
Run Code Online (Sandbox Code Playgroud)

什么是通用格式?

javascript parsing date string-formatting

21
推荐指数
1
解决办法
3万
查看次数

StringFormat被忽略


这是我的绑定(缩短,Command-Property也绑定)

<MenuItem Header="Key" CommandParameter="{Binding StringFormat='Key: {0}', Path=PlacementTarget.Tag, RelativeSource={RelativeSource AncestorType=ContextMenu}}"/>
Run Code Online (Sandbox Code Playgroud)

ContectMenu的PlacementTarget的Tag-Property是一个类似String的属性

"Short.Plural"
Run Code Online (Sandbox Code Playgroud)

我期望在Command-Handler中收到的是:

Key: Short.Plural
Run Code Online (Sandbox Code Playgroud)

但我真正得到的是:

Short.Plural
Run Code Online (Sandbox Code Playgroud)

wpf binding string-formatting string-literals

21
推荐指数
2
解决办法
6040
查看次数

为什么gcc -Wall会给出关于零长度格式字符串的警告?

我搜索了一下这方面的信息,但没有找到任何令人满意的.函数调用是否有一些特殊的行为

sprintf(someString, "");
Run Code Online (Sandbox Code Playgroud)

这解释了为什么这是警告(在gcc上使用-Wall)?我只是发现C标准允许零长度格式字符串.

我尝试了以下示例

#include <stdio.h>

int main()
{
    char str[2] = {'a', 'a'};
    sprintf(str, "");
    printf("\'%c\'\'%c\'\n", str[0], str[1]);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

打印出来的

'''a'
Run Code Online (Sandbox Code Playgroud)

这正是我期望看到的.那么,为什么警告?

c printf gcc string-formatting gcc-warning

21
推荐指数
2
解决办法
1万
查看次数

如何使用stringstream格式化十六进制数字

我试图将unsigned short转换为大写的十六进制表示,并使用stringstream将前缀为0.我似乎无法得到大写和0的正确.这是我现在拥有的:

USHORT id = 1127;
std::stringstream ss;
ss << std::showbase << std::uppercase << std::setfill('0') << std::setw(4) << std::hex << id;
std::string result = ss.str();
Run Code Online (Sandbox Code Playgroud)

这导致前缀'0x'也是大写的,但我希望它是小写的.它还导致在前缀0x base(当前为0X)之后没有前缀0到十六进制值.例如,现在将输出0X467而不是预期的0x0467.我该如何解决?

c++ hex stringstream string-formatting c++11

21
推荐指数
1
解决办法
4万
查看次数

如何编译C#字符串插值?

我知道插值是语法糖string.Format(),但它是否有任何特殊的行为/识别何时与字符串格式化方法一起使用?

如果我有一个方法:

void Print(string format, params object[] parameters)
Run Code Online (Sandbox Code Playgroud)

以下使用插值调用它:

Print($"{foo} {bar}");
Run Code Online (Sandbox Code Playgroud)

以下哪个调用行最相当于字符串插值的编译结果?

Print(string.Format("{0} {1}", new[] { foo, bar }));
Print("{0} {1}", new[] { foo, bar });
Run Code Online (Sandbox Code Playgroud)

问题背后的推理:诸如NLog之类的记录框架通常会推迟字符串格式化,直到确定将实际写入日志消息为止.一般来说,我更喜欢字符串插值语法,但我需要知道它是否会产生额外的性能损失.

c# string-formatting roslyn c#-6.0

21
推荐指数
1
解决办法
1821
查看次数