在PowerShell中我有一个字符串对象数组,我有一个包含字符串对象的对象.在Java中,您可以执行a .equals(aObject)来测试字符串值是否匹配,而==如果两个对象引用内存中的相同位置则执行测试.
如何.equals(aObject)在powershell中运行等效项?
我这样做:
$arrayOfStrings[0].Title -matches $myObject.item(0).Title
Run Code Online (Sandbox Code Playgroud)
这两个都具有完全相同的字符串值,但我得到返回值false.有什么建议?
可能重复:
是否有为C#编写的模糊搜索或字符串相似性函数库?
比较2个字符串以查看它们有多相似的最佳方法是什么?
例子:
My String
My String With Extra Words
Run Code Online (Sandbox Code Playgroud)
要么
My String
My Slightly Different String
Run Code Online (Sandbox Code Playgroud)
我要找的是确定每对中第一个和第二个字符串的相似程度.我想对比分进行评分,如果字符串足够相似,我认为它们是匹配对.
有没有一种很好的方法在C#中做到这一点?
我对StringComparison枚举的选项感到困惑.我只是想比较两个忽略大小写的字符串.有人可以解释当前文化,不变文化和序数的含义吗?大多数用例是否有共同选项,如果有,在什么情况下需要其他选项?
作为参考,StringComparison枚举的选项如下:
我正在尝试将字符数组与字符串进行比较,如下所示:
const char *var1 = " ";
var1 = getenv("myEnvVar");
if(var1 == "dev")
{
// do stuff
}
Run Code Online (Sandbox Code Playgroud)
这个if语句永远不会被验证为真......当我输出var1时它是"dev",我想也许它与空终止字符串有关,但是"dev"和var1的strlen是相等的...我也可能认为var1 =="dev"将"dev"与var1的内存位置进行比较而不是值.*var1 =="dev"导致错误....尝试了很多东西,可能是saavy c ++开发人员的简单解决方案(我没有在一段时间内编写c ++).
编辑:我们试过了
if(strcmp(var1, "dev") == 0)
Run Code Online (Sandbox Code Playgroud)
和
if(strncmp(var1, "dev", 3) == 0)
Run Code Online (Sandbox Code Playgroud)
谢谢
编辑:在家测试后,我只是建议我的同事将数据类型更改为字符串.我相信他正在将一个大字母的char数组与一个字符串进行比较.我把一个输出sizeof,strlen等的程序放在一起,以帮助我们完成它.感谢大家的帮助.
可能重复:
C#中字符串比较方法的差异
在.NET中有许多字符串比较方法,我只是想确认哪一个是最好的考虑性能.
string.Equals()
string.Compare()
string.CompareTo()
string.CompareOrdinal()
string.ReferenceEquals()
if (str1 == str2)
Run Code Online (Sandbox Code Playgroud) 从未来的这个问题,我不知道为什么ä和ae是不同的(这是有道理的),但ß并ss视为相等.即使这个问题似乎是相关的,我也没有找到答案,甚至提到"这ß将与SS德国或类似的相提并论",但不是为什么.
我发现MSDN上唯一的资源是:如何:比较字符串
这里提到以下但也缺乏原因:
// "They dance in the street."
// Linguistically (in Windows), "ss" is equal to
// the German essetz: 'ß' character in both en-US and de-DE cultures.
.....
Run Code Online (Sandbox Code Playgroud)
那么,为什么要true对de-DE文化或任何其他文化进行评估:
var ci = new CultureInfo("de-DE");
int result = ci.CompareInfo.Compare("strasse", "straße", CompareOptions.IgnoreNonSpace); // 0
bool equals = String.Equals("strasse", "straße", StringComparison.CurrentCulture); // true
equals = String.Equals("strasse", …Run Code Online (Sandbox Code Playgroud) 我有一个关于在Java中将字符串与空字符串进行比较的问题.有没有区别,如果我将字符串与空字符串比较==或equals?例如:
String s1 = "hi";
if (s1 == "")
Run Code Online (Sandbox Code Playgroud)
要么
if (s1.equals(""))
Run Code Online (Sandbox Code Playgroud)
我知道应该比较字符串(和一般的对象)equals,而不是==,但我想知道它是否对空字符串很重要.
我试图在一个简单的shell脚本中比较两个字符串.我使用的是/bin/sh代替/bin/bash,经过无数小时的调试后,事实证明sh(实际上是破折号)无法处理这段代码:
if [ "$var" == "string" ]
then
do something
fi
Run Code Online (Sandbox Code Playgroud)
什么是比较字符串使用的可移植方式/bin/sh?我知道我总是可以通过使用!=来做相反的事情,但我想知道一种更干净,更便携的方式.
这是一个难题......
我有两个相同50000+电子产品的数据库,我想将一个数据库中的产品与另一个数据库中的产品相匹配.但是,产品名称并不总是相同的.我已经尝试使用Levenshtein距离来测量弦的相似性但是这没有用.例如,
-LG 42CS560 42-Inch 1080p 60Hz LCD HDTV
-LG 42 Inch 1080p LCD HDTV
Run Code Online (Sandbox Code Playgroud)
这些项目是相同的,但他们的产品名称变化很大.
另一方面...
-LG 42 Inch 1080p LCD HDTV
-LG 50 Inch 1080p LCD HDTV
Run Code Online (Sandbox Code Playgroud)
这些是具有非常相似产品名称的不同产品.
我该如何解决这个问题?
machine-learning pattern-matching string-comparison levenshtein-distance
我知道之前已经注意到这个问题,或多或少简洁,但我仍然创建这个新线程,因为我在编写单元测试时再次遇到了这个问题.
默认的字符串比较(即文化相关的区分大小写的比较,我们得到有string.CompareTo(string),Comparer<string>.Default,StringComparer.CurrentCulture,string.Compare(string, string)等)违反及物当字符串包含连字符(或减号,我说的是普通的U + 002D字符).
这是一个简单的复制品:
static void Main()
{
const string a = "fk-";
const string b = "-fk";
const string c = "Fk";
Console.WriteLine(a.CompareTo(b)); // "-1"
Console.WriteLine(b.CompareTo(c)); // "-1"
Console.WriteLine(a.CompareTo(c)); // "1"
var listX = new List<string> { a, b, c, };
var listY = new List<string> { c, a, b, };
var listZ = new List<string> { b, c, a, };
listX.Sort();
listY.Sort();
listZ.Sort();
Console.WriteLine(listX.SequenceEqual(listY)); // "False" …Run Code Online (Sandbox Code Playgroud) string ×6
.net ×5
c# ×5
.net-4.0 ×1
algorithm ×1
bash ×1
c++ ×1
comparison ×1
dash-shell ×1
java ×1
powershell ×1
sorting ×1
windows ×1