标签: string-comparison

Culture-Invariant区分大小写的字符串比较会在不同的计算机上返回不同的结果

我发现我的机器和构建服务器上的测试结果不同.我设法找到了不同的单行.这是一个字符串比较.在第一个字符的情况下,两个字符串不同.

下面的测试在我的本地机器上传递,在构建机器上失败.

[TestClass]
public class Tests 
{
    [TestMethod]
    public void Strings()
    {
        Assert.IsFalse(0 == string.Compare("Term’s", "term’s", false, CultureInfo.InvariantCulture));
    }
}
Run Code Online (Sandbox Code Playgroud)

我也尝试将其更改为string.Equals:

string.Equals("Term’s", "term’s", StringComparison.InvariantCulture);
Run Code Online (Sandbox Code Playgroud)

string.Equals 在构建服务器上返回true并在本地计算机上返回false.

顺序比较在两台机器上给出相同的结果:

string.Compare("Term’s", "term’s", StringComparison.Ordinal))
Run Code Online (Sandbox Code Playgroud)

据我了解,InvariantCulture应该在各地返回相同的结果.区分大小写的文化不变字符串比较如何依赖于机器?我应该检查哪些设置来识别问题?

更新:平台和字符串

字符串很重要.对于具有"异国情调"标点符号的字符串,例如右单引号右双引号,可以观察到这些结果

似乎该行为在Windows 8计算机上重现.如果您键入以下内容,甚至可以在https://dotnetfiddle.net/上看到它:

using System;
using System.Globalization;

public class Program
{
    public static void Main()
    {
        Console.WriteLine(0 == string.Compare("Terms", "terms", false, CultureInfo.InvariantCulture));
        Console.WriteLine(0 == string.Compare("Term’s", "term’s", false, CultureInfo.InvariantCulture));
        Console.WriteLine(0 == string.Compare("Term“s", "term“s", false, CultureInfo.InvariantCulture));
        Console.WriteLine(0 == string.Compare("Term”s", "term”s", false, CultureInfo.InvariantCulture)); …
Run Code Online (Sandbox Code Playgroud)

.net c# cultureinfo string-comparison

13
推荐指数
1
解决办法
1055
查看次数

在ECMAScript中检查空字符串时,为什么要在string ==""上使用string.length == 0?

我当前项目中的大多数开发人员使用(对我而言)奇怪的方法来检查ECMAScript中的空字符串:

if (theString.length == 0)
    // string is empty
Run Code Online (Sandbox Code Playgroud)

我通常会这样写:

if (theString == "")
    // string is empty
Run Code Online (Sandbox Code Playgroud)

后一版本对我来说似乎更具可读性和自然性.

我没有问过任何人似乎能够解释版本1的优点.我想在过去的某个时候有人告诉大家这是做到这一点的方法,但现在那个人离开了,没有人记得为什么要这样做办法.

我想知道为什么我应该在第二个版本中选择第一个版本?重要的是,一个版本比另一个版本好吗?由于某种原因,一个版本更安全还是更快?

(我们实际上是在符合ECMAScript Edition 4的Siebel eScript中执行此操作)

谢谢.

javascript string-comparison ecmascript-4

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

比较std :: strings的最佳方法

比较std::strings 的最佳方法是什么?显而易见的方法是if/ else:

std::string input;
std::cin >> input;

if ( input == "blahblahblah" )
{
    // do something.
}

else if ( input == "blahblah" )
{
    // do something else.
}

else if ( input == "blah" )
{
    // do something else yet.
}

// etc. etc. etc.
Run Code Online (Sandbox Code Playgroud)

另一种可能性是使用std::mapswitch/ case.在进行这些比较(例如8,10,12 +)时,最好的方法是什么?

c++ string io comparison string-comparison

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

比较SQL Server中的两个字符串

有没有办法比较SQL Server 2008存储过程中的两个字符串,如下所示?

int returnval = STRCMP(str1, str2)
Run Code Online (Sandbox Code Playgroud)
  • 如果字符串相同则返回0
  • 如果第一个参数根据当前排序顺序小于第二个参数,则返回-1.
  • 否则返回1.

上面的方法我在MySQL中找到但在SQL Server中找不到.

sql string-comparison sql-server-2008

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

有没有办法对所有语言的字符串进行排序?

我有这个代码.它用法语和俄语正确排序.我使用Locale.US,它似乎是正确的.这个解决方案适用于所有语言吗?它适用于其他语言吗?例如:中国人,韩国人,日本人......如果没有,有什么更好的解决方案?

public class CollationTest {
    public static void main(final String[] args) {
        final Collator collator = Collator.getInstance(Locale.US);
        final SortedSet<String> set = new TreeSet<String>(collator);

        set.add("abîmer");
        set.add("abîmé");
        set.add("aberrer");
        set.add("abhorrer");
        set.add("aberrance");
        set.add("abécédaire");
        set.add("abducteur");
        set.add("abdomen");

        set.add("??????????????-?????????????????");
        set.add("???????");
        set.add("????????");
        set.add("?????????????");
        set.add("???????");
        set.add("???????");
        set.add("???????");
        set.add("???????");

        for(final String s : set) {
            System.out.println(s);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

更新: 对不起,我不要求这个集合必须包含所有语言.我的意思是这个集包含一种语言,并在每种语言中正确排序.

public class CollationTest {
    public static void main(final String[] args) {
        final Collator collator = Collator.getInstance(Locale.US);
        final SortedSet<String> set = new TreeSet<String>(collator);

        // Sorting in French.
        set.clear();
        set.add("abîmer");
        set.add("abîmé"); …
Run Code Online (Sandbox Code Playgroud)

java collation string-comparison

12
推荐指数
2
解决办法
9456
查看次数

检查字符串是否是标点字符

假设我有一个包含一些字母和标点符号的String数组

String letter[] = {"a","b","c",".","a"};
Run Code Online (Sandbox Code Playgroud)

在信[3]中我们有"."

如何检查字符串是否为标点字符?我们知道有很多可能的标点字符(,.?!等)

我到目前为止的进展:

for (int a = 0; a < letter.length; a++) {
    if (letter[a].equals(".")) { //===>> i'm confused in this line
        System.out.println ("it's punctuation");
    } else {
        System.out.println ("just letter");
    }
}
Run Code Online (Sandbox Code Playgroud)

java string-comparison punctuation

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

为什么"F"+"alse"不是=="False"?

可能重复:
如何比较Java中的字符串?

我无法理解为什么声明的变量不一样.

前代码:

 String firstPart = "F";
 String whole = "False";
 String connected = firstPart + "alse";
 System.out.println(connected == whole);
Run Code Online (Sandbox Code Playgroud)

现在这产生一个布尔值,我认为它将是"真的"但它不是,它出来是假的,我不明白为什么.

有人可以解释一下吗?

java string-comparison

12
推荐指数
3
解决办法
2626
查看次数

案例不敏感词典与元组键

我有一个字典,其中键是元组,其中第一项是日期,第二项是字符串.我希望字典不区分大小写.

我知道如果键只是一个字符串,我可以在声明字典时将StringComparer.OrdinalIgnoreCase作为参数传递,但是当键是元组时,这似乎不起作用.

有没有办法指定要在元组的第二项上使用的StringComparer?

谢谢

c# dictionary string-comparison

12
推荐指数
1
解决办法
2229
查看次数

为什么PHP在[松散]比较之前将两个数字字符串转换为数字?

我浏览了几个类似的问题,但他们都只说明了这样一个事实:

如果...比较涉及数字字符串,则每个字符串将转换为数字,并且数字执行比较.

好的,我明白了.它解释'00001' == '1'返回时发生了什么TRUE.

问题是:为什么 PHP会这样做?
探测字符串是数字的原因是什么,然后如果是这样的话?为什么我们不能只比较两个字符串?

如果两个操作数具有不同的类型,我可以完全理解需要什么样的转换.但是,当它们都是字符串时,它为什么会做" 通常的数学 "

php comparison casting string-comparison

12
推荐指数
2
解决办法
2021
查看次数

强制localeCompare区分大小写

我正在尝试使用JavaScript的localeCompare函数来排序字符串.

我对devTools控制台中运行以下行的结果感到惊讶:

"a".localeCompare("b") // returns: -1
"A".localeCompare("b") // returns: -1
Run Code Online (Sandbox Code Playgroud)

另一个测试:

"b".localeCompare("a") // returns: 1
"B".localeCompare("a") // returns: 1
Run Code Online (Sandbox Code Playgroud)

即使我对我的排序更具体,我也会得到相同的结果:

"a".localeCompare("b", { usage: "sort", sensitivity: 'variant' }) // -1
"A".localeCompare("b", { usage: "sort", sensitivity: 'variant' }) // -1
"b".localeCompare("a", { usage: "sort", sensitivity: 'variant' }) // 1
"B".localeCompare("a", { usage: "sort", sensitivity: 'variant' }) // 1
Run Code Online (Sandbox Code Playgroud)

我想使用localeCompare以区分大小写的方式比较字符串,所以不应该"b"与"a"和"B"相比,"a"与"a"相比具有相反的结果吗?

javascript string-comparison

12
推荐指数
1
解决办法
4152
查看次数