标签: string-comparison

String.comparison性能(带修剪)

我需要做很多高性能的不区分大小写的字符串比较,并意识到我这样做.ToLower().Trim()真的很愚蠢,因为所有的新字符串都被分配了

所以我挖了一点,这种方式似乎更可取:

String.Compare(txt1,txt2, StringComparison.OrdinalIgnoreCase)
Run Code Online (Sandbox Code Playgroud)

这里唯一的问题是我想忽略前导或尾随空格,即Trim(),但如果我使用Trim,我对字符串分配也有同样的问题.我想我可以检查每个字符串,看看它是StartsWith("")还是EndsWith("")然后才修剪.要么指出索引,要么计算每个字符串的长度并传递给string.Compare覆盖

public static int Compare
(
    string strA,
    int indexA,
    string strB,
    int indexB,
    int length,
    StringComparison comparisonType
) 
Run Code Online (Sandbox Code Playgroud)

但是这看起来相当混乱我可能不得不使用一些整数,如果我没有为两个字符串上的尾随和前导空白的每个组合制作一个非常大的if-else语句...那么优雅解决方案的任何想法?

这是我目前的提议:

public bool IsEqual(string a, string b)
    {
        return (string.Compare(a, b, StringComparison.OrdinalIgnoreCase) == 0);
    }

    public bool IsTrimEqual(string a, string b)
    {
        if (Math.Abs(a.Length- b.Length) > 2 ) // if length differs by more than 2, cant be equal
        {
            return  false;
        }
        else if (IsEqual(a,b))
        {
            return true;
        }
        else 
        {
            return (string.Compare(a.Trim(), b.Trim(), StringComparison.OrdinalIgnoreCase) …
Run Code Online (Sandbox Code Playgroud)

c# string string-comparison

10
推荐指数
1
解决办法
9319
查看次数

使用==或Equals进行字符串比较

在某些语言(例如C++)中,您不能使用==等运算符进行字符串比较,因为它会比较字符串对象的地址,而不是字符串本身.但是,在C#中,您可以使用==来比较字符串,它实际上会比较字符串的内容.但是还有字符串函数来处理这种比较,所以我的问题是; 你应该?

鉴于两个字符串:

string aa = "aa"; 
string bb = "bb";
Run Code Online (Sandbox Code Playgroud)

你应该像这样比较它们:

bool areEqual = (aa == bb); 
Run Code Online (Sandbox Code Playgroud)

或者你应该使用Equal函数,如下所示:

bool areEqual = aa.Equals(bb); 
Run Code Online (Sandbox Code Playgroud)

反正有技术差异吗?或者最佳实践的合理论据?

.net c# string string-comparison

10
推荐指数
2
解决办法
5556
查看次数

strcmp或string :: compare?

我想比较两个字符串.有可能strcmp吗?(我试过,似乎没有用).是string::compare解决方案吗?

除此之外,有没有办法比较string一个char


感谢您的早期评论.我用C++编写代码,是的,std::string就像你们中的一些人提到的那样.我没有发布代码,因为我想学习一般知识,这是一个很长的代码,所以它与问题无关.

我想我已经了解了C++和C之间的区别,感谢你指出这一点.我现在将尝试使用重载运算符.顺便说一句string::compare.

c c++ string char string-comparison

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

比较字符串结尾的最佳方法是使用RIGHT,LIKE还是其他?

我需要将字符串的结尾与存储过程中可能结束的列表进行比较.这将被称为很多,并有大约10-15个候选人结局.此时,仅代码解决方案优于创建专用于此的表.有点像:

IF (ENDSWITH(@var, 'foo') OR
    ENDSWITH(@var, 'bar') OR
    ENDSWITH(@var, 'badger') OR
    ENDSWITH(@var, 'snake'))
(
)
Run Code Online (Sandbox Code Playgroud)

我正在寻找速度方面的最佳方式,同时也是可维护性.我知道的候选人是

  • 对,我最喜欢的,但这意味着我必须对字符串长度进行硬编码,因此容易出错.它还意味着多次切割源字符串.

    IF ((LEN(@var) >= 3 AND RIGHT(@var, 3) = 'foo')) OR ...
    
    Run Code Online (Sandbox Code Playgroud)
  • 喜欢,可能更慢,但有点清洁

    IF (@var LIKE '%foo') OR ...
    
    Run Code Online (Sandbox Code Playgroud)
  • CHARINDEX,因为它搜索整个字符串,所以可能更慢

  • SUBSTRING,很可能等同于RIGHT而且更难看

  • SQLCLR创建我自己的ENDSWITH,它可以很快

可能有更好的方法我不知道.你怎么看?

sql t-sql sql-server optimization string-comparison

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

Bash比较输出而不是命令

尝试创建一个脚本来读取远程文件并检查md5校验和,如果不匹配但发生错误我无法理解.

#!/bin/sh
REMOTEMD5=$(ssh user@host 'md5sum file.txt')
LOCALMD5=$(md5sum 'file.txt')
if [$LOCALMD5 !== $REMOTEMD5]
then
  echo "all OK"
else
  echo -e "no match, Local:"$LOCALMD5"\nRemote:"$REMOTEMD5
fi
Run Code Online (Sandbox Code Playgroud)

这回来了 line 4: [6135222a12f06b2dfce6a5c1b736891e: command not found

我尝试在$ LOCALMD5周围使用'或',但似乎从来没有能够比较输出.我做错了什么?谢谢

bash string-comparison

10
推荐指数
3
解决办法
4万
查看次数

JavaScript正则表达式测试,如果字符串包含特定的单词(带变量)

我有一个正则表达式来检查字符串是否包含特定的单词.它按预期工作:

/\bword\b/.test('a long text with the desired word amongst others'); // true
/\bamong\b/.test('a long text with the desired word amongst others'); // false
Run Code Online (Sandbox Code Playgroud)

但我需要一个即将在变量中检查的词.使用new RegExp不正常,它总是返回false:

var myString = 'a long text with the desired word amongst others';

var myWord = 'word';
new RegExp('\b' + myWord + '\b').test(myString); // false

myWord = "among";
new RegExp('\b' + myWord + '\b').test(myString); // false
Run Code Online (Sandbox Code Playgroud)

这有什么不对?

javascript regex string-comparison

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

仍然排序的最佳整数编码

UTF-8的一个优点是,如果你逐个字节地比较两个字符串(带有<),你会得到相同的答案,就好像你比较了它们逐个代码点.我想知道是否有类似的编码是最佳的大小(例如UTF-8"浪费"空间,通过用10xxxxxx标记字节,如果它们不是表示代码点的第一个字节).

这里的最优性假设是,如果n < m,则非负数n比数m更频繁.

我最感兴趣的是知道是否存在适用于整数的(字节可比较的)编码,其中nm更频繁.n | <| m |.

compression math comparison string-comparison

10
推荐指数
1
解决办法
304
查看次数

JavaScript:与文化无关的不区分大小写的字符串比较

如果之前已经提出过这个问题,请指出相关问题.

tl; dr:如何根据英国规则忽略套管,比较JavaScript中的两个字符串?

我的代码分析和比较来自两个不同来源的数据,每个来源对关键字是大写还是小写都有不同的看法,这意味着需要进行不区分大小写的比较.但是,如果在其他文化中使用(例如土耳其及其与字母I的臭名昭着的问题),我不希望系统中断.

JavaScript是否有任何方法可以进行与文化无关(读取:英语)不区分大小写的字符串比较?

javascript culture string-comparison

10
推荐指数
1
解决办法
5225
查看次数

你怎么知道两个通配符是否重叠?

给定两个带*通配符的字符串,我想知道是否可以创建一个匹配两者的字符串.

例如,这两个是重叠的简单情况:

  1. 你好,世界
  2. 赫尔*

但所有这些都是:

  1. *.CSV
  2. 报告*.CSV
  3. reportsdump.csv

是否有一个算法用于执行此操作?或者可能是Windows中的实用程序功能或者我可以调用或复制的库?

language-agnostic string algorithm string-comparison

9
推荐指数
1
解决办法
746
查看次数

如何比较两个CharSequences中的字符

我应该如何比较两个CharSequences的两个字符?

这是我的两个CharSequence:

CharSequence name1 = fname.getText();
CharSequence name2 = sname.getText();
Run Code Online (Sandbox Code Playgroud)

如果我尝试比较这样:

if(name1[i] == name2[j])
Run Code Online (Sandbox Code Playgroud)

..给了我错误.

java android string-comparison

9
推荐指数
3
解决办法
5万
查看次数