给定任何字符串,我想创建一个代表字符串的智能首字母缩略词.如果你们中的任何人使用过JIRA,他们就能很好地完成这项任务.
例如,给定单词: Phoenix它将生成PHX或给出隐私事件管理这个词它将创建PEM.
我有一些代码可以完成后者:
string.Join(string.Empty, model.Name
.Where(char.IsLetter)
.Where(char.IsUpper))
Run Code Online (Sandbox Code Playgroud)
如果只有一个单词及其小写,则此情况不会处理.
但它没有考虑第一种情况.有任何想法吗?我正在使用C#4.5
swift中的函数采用Swift中的任何数字类型(Int,Double,Float,UInt等).该函数将数字转换为字符串
功能签名如下:
func swiftNumbers <T : NumericType> (number : T) -> String {
//body
}
Run Code Online (Sandbox Code Playgroud)
NumericType是一种自定义协议,已添加到Swift中的数字类型中.
在函数体内,该数字应转换为字符串:
我使用以下内容
var stringFromNumber = "\(number)"
Run Code Online (Sandbox Code Playgroud)
这不是那么优雅,PLUS:如果数字的绝对值严格低于0.0001则给出:
"\(0.000099)" //"9.9e-05"
Run Code Online (Sandbox Code Playgroud)
或者如果数字是一个大数字:
"\(999999999999999999.9999)" //"1e+18"
Run Code Online (Sandbox Code Playgroud)
有没有办法解决这个字符串插值限制?(不使用Objective-C)
PS:
NumberFormater 也不起作用
import Foundation
let number : NSNumber = 9_999_999_999_999_997
let formatter = NumberFormatter()
formatter.minimumFractionDigits = 20
formatter.minimumIntegerDigits = 20
formatter.minimumSignificantDigits = 40
formatter.string(from: number) // "9999999999999996.000000000000000000000000"
let stringFromNumber = String(format: "%20.20f", number) // "0.00000000000000000000"
Run Code Online (Sandbox Code Playgroud) 我需要建立长命令行R并将它们传递给system().我发现使用paste0/paste函数甚至sprintf函数构建每个命令行都非常不方便.是否有更简单的方法:
而不是这个难以阅读和太多的报价:
cmd <- paste("command", "-a", line$elem1, "-b", line$elem3, "-f", df$Colum5[4])
Run Code Online (Sandbox Code Playgroud)
要么:
cmd <- sprintf("command -a %s -b %s -f %s", line$elem1, line$elem3, df$Colum5[4])
Run Code Online (Sandbox Code Playgroud)
我想要这个,可以吗:
cmd <- buildcommand("command -a %line$elem1 -b %line$elem3 -f %df$Colum5[4]")
Run Code Online (Sandbox Code Playgroud) 使用现有的String.Format,我可以将格式字符串放在数据库或资源文件中,而不是将其硬编码到我的应用程序中.Interpolation有可能吗?
我猜不是,因为它似乎是一个编译器检查的东西.
我已经开始使用Interpolated Strings(C#6的新功能),它非常有用且优雅.但根据我的需要,我必须将字符串格式作为参数传递给方法.像下一个:
MyMethod(string format)
Run Code Online (Sandbox Code Playgroud)
在过去,我在下一个方面使用它:
MyMethod("AAA{0:00}")
Run Code Online (Sandbox Code Playgroud)
现在我尝试了这段代码:
MyMethod($"AAA{i:00}")
Run Code Online (Sandbox Code Playgroud)
但这不起作用,因为它i是在方法内部创建的,并且在此上下文中超出了范围.
是否可以使用任何技巧将插值字符串作为参数传递给方法?
有没有一种优雅的方法来获取%s字符串对象的命名类变量的名称?像这样:
string = '%(a)s and %(b)s are friends.'
names = get_names(string) # ['a', 'b']
Run Code Online (Sandbox Code Playgroud)
已知的替代方式:
使用正则表达式解析名称,例如:
import re
names = re.findall(r'%\((\w)\)[sdf]', string) # ['a', 'b']
Run Code Online (Sandbox Code Playgroud)使用.format()兼容的格式和Formatter().parse(string).
但是具有%s类变量的字符串怎么样?
PS:python 2.7
假设我创建了这个简单的字符串宏
macro e_str(s)
return string("I touched this: ",s)
end
Run Code Online (Sandbox Code Playgroud)
如果我将它应用于带插值的字符串,我会得到:
julia> e"foobar $(log(2))"
"I touched this: foobar \$(log(2))"
Run Code Online (Sandbox Code Playgroud)
而我想获得:
julia> e"foobar $(log(2))"
"I touched this: foobar 0.6931471805599453"
Run Code Online (Sandbox Code Playgroud)
我必须对我的宏声明做出哪些更改?
以下 C# 表达式会导致我的程序出现编译器错误:
$"Getting image from {location.IsLatitudeLongitude ? $"{location.Latitude} - {location.Longitude}" : location.Location}."
Run Code Online (Sandbox Code Playgroud)
难道不能像这样使用字符串插值吗?或者根本不可能做到这一点?
我有以下带有三元运算符的剃刀代码来包含或省略 data-* 属性:
<select class="form-control"
@(field.DependentDropdown ? $"data-selected={Model.KeyValues.GetValue(field.Name)}" : "")>
Run Code Online (Sandbox Code Playgroud)
当它在 HTML 中呈现时,它是这样的:
<select class="form-control"
data-selected="Toyota" yaris="">
Run Code Online (Sandbox Code Playgroud)
正如您所看到的,数据选择属性的值的格式不正确——它应该是用双引号括起来的一个词"Toyota Yaris"。
如何正确转义或添加双引号:
$"data-selected={Model.KeyValues.GetValue(field.Name)}"
Run Code Online (Sandbox Code Playgroud) 从各种来源,我了解到 Python 3(f 字符串为 3.6+)中有四种主要的字符串格式化/插值技术:
%,与 C 类似printfstr.format()string来自标准库模块的模板字符串我的使用知识主要来自Python String Formatting Best Practices(来源A):
str.format()是作为 -style 的更好替代品而创建的%,因此后者现在已过时
str.format()很容易受到攻击str.format()仅允许字符串文字的类似行为,但编写起来更短,实际上是用于连接的某种程度优化的语法糖str.format()(第一个源中演示的)和其他两种方法(第一个源中隐含的)更安全据我了解,上述漏洞来自str.format()于可在任何普通字符串上使用的方法,其中定界大括号是字符串数据本身的一部分。包含大括号分隔的替换字段的恶意用户输入可以提供给访问环境属性的方法。我相信这与其他格式化方式不同,在其他格式化方式中,程序员是唯一可以向预格式化字符串提供变量的人。例如,f 字符串与 but 具有相似的语法str.format(),因为 f 字符串是文字,并且插入的值是通过类似串联的行为单独计算的,所以它们不容易受到相同的攻击(来源 B)。-formatting%和 Template 字符串似乎也只提供供程序员替换的变量;指出的主要区别是模板的功能更加有限。
我看到很多人都强调其脆弱性,str.format()这让我产生了在使用其他技术时应该警惕什么的问题。来源 A将模板字符串描述为上述方法中最安全的方法,“因为它们降低了复杂性”:
其他字符串格式化技术的更复杂的格式化迷你语言可能会给您的程序带来安全漏洞。
str.format() …python security user-input string-formatting string-interpolation