我发现我的机器和构建服务器上的测试结果不同.我设法找到了不同的单行.这是一个字符串比较.在第一个字符的情况下,两个字符串不同.
下面的测试在我的本地机器上传递,在构建机器上失败.
[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) 我当前项目中的大多数开发人员使用(对我而言)奇怪的方法来检查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中执行此操作)
谢谢.
比较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::map和switch/ case.在进行这些比较(例如8,10,12 +)时,最好的方法是什么?
有没有办法比较SQL Server 2008存储过程中的两个字符串,如下所示?
int returnval = STRCMP(str1, str2)
Run Code Online (Sandbox Code Playgroud)
上面的方法我在MySQL中找到但在SQL Server中找不到.
我有这个代码.它用法语和俄语正确排序.我使用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) 假设我有一个包含一些字母和标点符号的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 firstPart = "F";
String whole = "False";
String connected = firstPart + "alse";
System.out.println(connected == whole);
Run Code Online (Sandbox Code Playgroud)
现在这产生一个布尔值,我认为它将是"真的"但它不是,它出来是假的,我不明白为什么.
有人可以解释一下吗?
我有一个字典,其中键是元组,其中第一项是日期,第二项是字符串.我希望字典不区分大小写.
我知道如果键只是一个字符串,我可以在声明字典时将StringComparer.OrdinalIgnoreCase作为参数传递,但是当键是元组时,这似乎不起作用.
有没有办法指定要在元组的第二项上使用的StringComparer?
谢谢
我浏览了几个类似的问题,但他们都只说明了这样一个事实:
好的,我明白了.它解释了'00001' == '1'返回时发生了什么TRUE.
问题是:为什么 PHP会这样做?
探测字符串是数字的原因是什么,然后如果是这样的话?为什么我们不能只比较两个字符串?
如果两个操作数具有不同的类型,我可以完全理解需要什么样的转换.但是,当它们都是字符串时,它为什么会做" 通常的数学 "
我正在尝试使用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"相比具有相反的结果吗?
java ×3
c# ×2
comparison ×2
javascript ×2
.net ×1
c++ ×1
casting ×1
collation ×1
cultureinfo ×1
dictionary ×1
ecmascript-4 ×1
io ×1
php ×1
punctuation ×1
sql ×1
string ×1