给定用户提供的复合格式字符串(用于String.Format)和表示将用于格式化复合格式字符串的参数的一组类型,如何检查用户提供的值是否有效?
它应该是很容易地创建一个正则表达式来检查参数占位符的一般语法匹配" {index[,alignment][:formatString]}"每个文档.并且更难以验证复合格式字符串中占位符的索引是否小于实际的类型化参数数量(即它们不引用将不会给出的参数).但是,如果已知传入参数的类型,则还应该可以验证" :formatString"是否适合这些类型.
例如,{0:dddd MMMM}当第一个参数类型(0索引)是数字(String.Format("{0:dddd MMMM}", 1234)产生" dddd MMMM")时,您要验证用户未指定" "作为格式字符串.:formatString按类型的" "选项数量太大,无法手动检查所有内容.还有其他方法吗?或者您是否只需要与可能指定错误格式字符串的用户一起生活?
假设有没有自定义IFormatProvider,ICustomFormatter或IFormattable实现在这里打球.只是.NET Framework中已有的基本类型.用于解决自定义内容的奖励积分.
这可能是一个上帝可怕的问题,但我不确定为什么它不会让我这样做.
我有一个我需要存储在Web.config中的URL,它具有从网页中提取的动态参数.
所以我想存储:
<add key="TestURL"
value="https://test/subscribe?msisdn={0}&code=1&pass=2"/>
Run Code Online (Sandbox Code Playgroud)
它不允许我这样做.在{0}后,它在"&"处出错.
有谁能让我知道我在这里做错了什么?我需要逃脱这个角色吗?
我正在尝试使用String.Format来帮助构建一个将从本地变量中保存参数的URL.我想我很亲密,但不知道从哪里开始.
谢谢你,杰森
string link=string.format("<A HREF="http://webserver/?x={0}&y={1}">Click here</A>",variable1,variable2 )
Run Code Online (Sandbox Code Playgroud) 鉴于这种:
string msg = string.Format("Duckbill {0} Platypus has not been loaded. Fetch Duckbill {1}'s Platypus then continue.", userDuckbill, userDuckbill);
Run Code Online (Sandbox Code Playgroud)
......这样做就足够了:
string msg = string.Format("Duckbill {0} Platypus has not been loaded. Fetch Duckbill {1}'s Platypus then continue.", userDuckbill);
Run Code Online (Sandbox Code Playgroud)
?
在 Java 程序中,我使用的是Formatter.format()从服务器获取的带函数的字符串。我不能确定String要格式化的有占位符或有效数量的占位符。如果它String不符合预期,我想抛出一个异常 - 或者以某种方式记录它。
在这一点上,我不在乎什么类型的占位符是 ( String, Integer,...),我只想获得每个字符串的预期参数数量。
实现这一目标的最简单方法是什么?一种方法可能是使用正则表达式,但我在想是否有更方便的东西 - 例如内置函数。
这里有些例子:
Example String | number of placeholders:
%d of %d | 2
This is my %s | 1
A simple content. | 0
This is 100% | 0
Hi! My name is %s and I have %d dogs and a %d cats. | 3
Run Code Online (Sandbox Code Playgroud)
编辑:如果提供的参数不足,Formatter.format() 会引发异常。有可能我得到一个没有占位符的字符串。在这种情况下,即使我提供参数(将被省略),也不会抛出异常(即使我想抛出一个),只会返回该字符串值。我需要向服务器报告错误。
我的目标是使用库将 JSON 对象存储到 json 类型的 MySQL 数据库字段中mysql.connector。
import mysql.connector
import json
jsonData = json.dumps(origin_of_jsonData)
cnx = mysql.connector.connect(**config_defined_elsewhere)
cursor = cnx.cursor()
cursor.execute('CREATE DATABASE dataBase')
cnx.database = 'dataBase'
cursor = cnx.cursor()
cursor.execute('CREATE TABLE table (id_field INT NOT NULL, json_data_field JSON NOT NULL, PRIMARY KEY (id_field))')
Run Code Online (Sandbox Code Playgroud)
现在,下面的代码可以正常工作,我的问题的重点是“%s”的使用:
insert_statement = "INSERT INTO table (id_field, json_data_field) VALUES (%s, %s)"
values_to_insert = (1, jsonData)
cursor.execute(insert_statement, values_to_insert)
Run Code Online (Sandbox Code Playgroud)
我的问题是:在将变量 aValue(s) 组合成一个字符串时,我非常严格地坚持使用'...{}'.format(aValue)(or f'...{aValue}'),从而避免使用%s(不管我的原因是什么,我们不要在这里辩论它们 - 但它是如何我想尽可能保留它,因此我的问题)。
在任何情况下,无论我尝试哪种方式,我都无法使用类似于上述结构并使用'...{}'.format()(以任何形状或形式)而不是%s. 例如,我(在多次迭代中)尝试过
insert_statement …Run Code Online (Sandbox Code Playgroud) 我是 Python 新手。我正在编写一段非常简单的代码来使用“for”循环打印列表的内容,.format()我希望输出如下,但我收到此错误:
names = ['David', 'Peter', 'Michael', 'John', 'Bob']
for i in names:
print("{}.{}".format(i, names[i]))
Run Code Online (Sandbox Code Playgroud)
print("{}.{}".format(i,breakfastMenu[i]))
TypeError: list indices must be integers or slices, not str
Run Code Online (Sandbox Code Playgroud)
我想要的预期输出: 1. David 2. Peter 3. Michael 4. John 5. Bob
有人可以帮我得到那个输出吗?
我经常使用String.Format()它,因为它使字符串的构建更具可读性和可管理性.
有没有减少其语法冗长,例如使用扩展方法等?
Logger.LogEntry(String.Format("text '{0}' registered", pair.IdCode));
public static void LogEntry(string message)
{
...
}
Run Code Online (Sandbox Code Playgroud)
例如,我想使用我使用的所有方法和其他接收字符串的方法Console.Write(),例如:
Logger.LogEntry("text '{0}' registered", pair.IdCode);
Run Code Online (Sandbox Code Playgroud) Lua string.format( "%c", value )应该相当string.char( value )吗?
当字符值为零时似乎不是.
string.format( "%c", 0 ):len()
Run Code Online (Sandbox Code Playgroud)
返回0
string.char( 0 ):len()
Run Code Online (Sandbox Code Playgroud)
返回1
更奇怪的是,
string.format( "%c%s", 0, "abc" ):len()
Run Code Online (Sandbox Code Playgroud)
返回3 ; 其中%c的任何其他非零模数256值返回4,因此string.format不会像C一样在空字节处截断整个字符串sprintf,只是将%c字段折叠为空字符串而不是单字节字符串.注意,sprintf在这种情况下,C 写入零字节后跟abc字节.
在这种情况下,我在Lua文档中找不到任何描述预期行为的内容.Lua中的大多数其他字符串处理似乎将零字节视为有效的字符串字符.
这是关于OpenWrt的Lua 5.1.4-8.
特质还是错误?
我想在String.Format中将变量放入复合格式.含义
String str = String.Format("{0:[what should I put here]}", mydate, myFormat};
Run Code Online (Sandbox Code Playgroud)
所以结果将取决于myFormat.
myFormat = "yyyy" => str = "2015"
myFormat = "hh:mm:ss" => str = "08:20:20"
Run Code Online (Sandbox Code Playgroud)
我没有成功
String.Format("{0:{1}}", mydate, myFormat}
Run Code Online (Sandbox Code Playgroud)
也不
String.Format("{0:{{1}}}", mydate, myFormat}
Run Code Online (Sandbox Code Playgroud)
也不
String.Format("{0:\{1\}}", mydate, myFormat}
Run Code Online (Sandbox Code Playgroud)
感谢大家.
string.format ×10
c# ×5
python ×2
string ×2
.net ×1
composite ×1
datetime ×1
for-loop ×1
formatter ×1
java ×1
json ×1
list ×1
lua ×1
mysql-python ×1
openwrt ×1
validation ×1
verbosity ×1
web-config ×1