有许多方法可以比较字符串.通过一种方式比另一种方式获得性能提升吗?
我总是选择像这样比较字符串:
string name = "Bob Wazowski";
if (name.CompareTo("Jill Yearsley") == 0) {
// whatever...
}
Run Code Online (Sandbox Code Playgroud)
但我发现很少有人这样做,如果有的话,我看到更多的人只是做一个直接的==比较,据我所知,这是比较字符串的最差方式.我错了吗?
另外,它是如何比较LINQ查询中的字符串的?例如,我喜欢做以下事情:
var results = from names in ctx.Names
where names.FirstName.CompareTo("Bob Wazowski") == 0
select names;
Run Code Online (Sandbox Code Playgroud)
但同样,我看到很少有人在他们的LINQ查询中进行字符串比较.
如何以不区分大小写的方式比较字符串?
例如,"Go"和"go"应该被认为是相等的.
从他们的简短摘要描述中,它听起来像字符串比较规则StringComparison.Ordinal,StringComparison.InvariantCulture并且意味着它们如何对字符串进行排序.这就是全部吗?也就是说,这是否意味着我们可以在进行相等比较时使用字符串比较规则?
string.Equals(a, b, StringComparison....)
Run Code Online (Sandbox Code Playgroud)
还有额外的功劳:如果我们进行比较OrdinalIgnoreCase,它会对答案产生影响InvariantCultureIgnoreCase吗?怎么样?
请提供支持论据和/或参考.
谁知道为什么会这样?这是bash的错误吗?
x='mnt:[4026532411]'
[[ $x == $x ]] && echo OK
Run Code Online (Sandbox Code Playgroud)
我期待结果OK,但事实并非如此.
当然,这是有效的
[[ "$x" == "$x" ]] && echo OK
Run Code Online (Sandbox Code Playgroud)
但据我所知,bash [[]]的优点是在比较时不需要引用var.
x='a b'
[[ $x == $x ]] && echo OK
Run Code Online (Sandbox Code Playgroud)
作品.
讽刺的是
x='mnt:[4026532411]'
[[ $x != $x ]] && echo Oh my god
Run Code Online (Sandbox Code Playgroud)
结果是我的天啊
我有两个向量:
a = strsplit("po","")[[1]]
[1] "p" "o"
b = strsplit("polo","")[[1]]
[1] "p" "o" "l" "o"
Run Code Online (Sandbox Code Playgroud)
我正在尝试使用 来比较它们==。不幸的是,a==b给出了意想不到的结果。
a==b
[1] TRUE TRUE FALSE TRUE
Run Code Online (Sandbox Code Playgroud)
虽然我期望有:
[1] TRUE TRUE FALSE FALSE
Run Code Online (Sandbox Code Playgroud)
那么,是什么原因造成这种情况呢?怎样才能达到预期的效果呢?
该问题似乎与以下事实有关:两个向量的最后一个元素与更改b为 egpolf确实给出了预期结果相同,并且还因为设置b为pooo给出了TRUE TRUE FALSE TRUE而不是TRUE TRUE TRUE TRUE。
编辑
换句话说,我希望丢失的元素(当长度不同时)作为空值传递(似乎只""给出TRUE TRUE FALSE FALSE,NA并NULL给出不同的结果)。
c("p","o","","")==c("p","o","l","o")
[1] TRUE TRUE FALSE FALSE
Run Code Online (Sandbox Code Playgroud) 我有一个与字符串比较和字符比较相关的问题.
字符>和0(零)具有以下十进制值62并48相应地.
当我比较以下代码中的两个字符时,我得到了值True(这是正确的)
Console.WriteLine('>' > '0');
Run Code Online (Sandbox Code Playgroud)
当我在下面的代码中比较两个单字符字符串时,我得到的值-1表示">"小于"0"(默认文化是英语)
Console.WriteLine(string.Compare(">", "0"));
Run Code Online (Sandbox Code Playgroud)
而以下代码中的"3"和"1"(51和49代码值)的比较返回1(如预期的那样)
Console.WriteLine(string.Compare("3", "1"));
Run Code Online (Sandbox Code Playgroud)
另外,string.Compare(string str1, string str2)文档说:
比较使用当前文化来获取特定于文化的信息,例如套管规则和单个字符的字母顺序
您是否能够解释(或提供一些文档的参考)如何实现字符串比较,例如如何计算单个字符的字母顺序等?
我正在尝试与android XML数据绑定进行字符串比较,但我没有得到正确的结果.
在代码中评估我的表达式,我尝试notice.action == "continue"这是错误的.当然,在数据绑定中,这也是错误的.
android:textColor='@{ notice.action == "continue" ? @color/enabledPurple : @color/disabledGray}'
Run Code Online (Sandbox Code Playgroud)
只有notice.action.equals("continue")通过代码才能实现.这是预期的行为.我的问题是我无法通过数据绑定表达式完成此操作,因为它不会运行类似的方法equals.我该怎么做才能将比较表达式替换为另一个有效的比较表达式?
我正在使用本指南.
编辑:我错了,XML中允许使用方法.这样做了:
android:textColor='@{ notice.action.equals("continue") ? @color/enabledPurple : @color/disabledGray}'
Run Code Online (Sandbox Code Playgroud) 我正在进行代码审查,我很好奇,如果在尝试比较它们时忽略大小写,那么在JavaScript中将字符串转换为大写或小写更好.
琐碎的例子:
var firstString = "I might be A different CASE";
var secondString = "i might be a different case";
var areStringsEqual = firstString.toLowerCase() === secondString.toLowerCase();
Run Code Online (Sandbox Code Playgroud)
或者我应该这样做:
var firstString = "I might be A different CASE";
var secondString = "i might be a different case";
var areStringsEqual = firstString.toUpperCase() === secondString.toUpperCase();
Run Code Online (Sandbox Code Playgroud)
它似乎"应该"或者只能使用有限的字符集,只有英文字母,所以它比另一个更健壮吗?
作为一个注释,MSDN建议将字符串规范化为大写,但这适用于托管代码(可能是C#和F#,但它们有奇特的StringComparers和基础库):http://msdn.microsoft.com/en-us/library/bb386042. ASPX
如果我执行以下语句:
string.Compare("mun", "mün", true, CultureInfo.InvariantCulture)
Run Code Online (Sandbox Code Playgroud)
结果为'-1',表示'mun'的数值低于'mün'.
但是,如果我执行此语句:
string.Compare("Muntelier, Schweiz", "München, Deutschland", true, CultureInfo.InvariantCulture)
Run Code Online (Sandbox Code Playgroud)
我得到'1',表明'Muntelier,Schewiz'应该排在最后.
这是比较中的错误吗?或者,更有可能的是,在排序包含重音的字符串时,我应该考虑一个规则
这是一个问题的原因是,我正在排序一个列表,然后做一个手动二进制过滤器,意味着让每个字符串以'xxx'开头.
以前我使用的是Linq'Fhere'方法,但现在我必须使用另一个人编写的这个自定义函数,因为他说它表现更好.
但是自定义函数似乎没有考虑.NET具有的"unicode"规则.因此,如果我告诉它过滤'mün',它就找不到任何项目,即使列表中的项目以'mun'开头.
这似乎是因为重音字符的顺序不一致,这取决于重音字符后面的字符.
好的,我想我已经解决了这个问题.
在过滤器之前,我根据每个字符串的前n个字母进行排序,其中n是搜索字符串的长度.
我会解释我的问题:
我有一个名为的数据库表country.它有两列:ID和name.
当我想要搜索'paris',但拼错字:'pares'('e'代替'i'),我不会得到任何DB结果.
我希望系统能够提出可能有助于搜索的类似单词.
因此,我正在寻找帮助编写一个脚本,该脚本从DB中提出包含类似词语的建议:paris,paredes,...等.
string ×5
c# ×3
.net ×2
android ×1
bash ×1
comparison ×1
culture ×1
data-binding ×1
diacritics ×1
equality ×1
go ×1
javascript ×1
linq ×1
performance ×1
php ×1
r ×1
similarity ×1
sorting ×1