dart 字符串比较器

gfttwv5a  于 2023-04-09  发布在  其他
关注(0)|答案(5)|浏览(220)

在Dart中比较字符串的最佳方法是什么?String类不包含equals方法。是否推荐使用==
例如:

String rubi = 'good';
String ore = 'good';

rubi == ore;
qnyhuwrf

qnyhuwrf1#

是的,==是测试两个String是否相等的方法(只包含相同的字符序列)。代码的最后一行计算为true

b5buobof

b5buobof2#

字符串是不可变的对象,这意味着你可以创建它们,但不能改变它们。你当然可以用其他字符串构建一个新的字符串,但一旦创建,字符串的内容就固定了。
这是一种优化,因为具有相同顺序的相同字符的两个字符串可以是相同的对象。

String rubi = 'good';
String ore = 'good';

print(rubi == ore); // true, contain the same characters
print(identical(rubi, ore)); // true, are the same object in memory
dphi5xsq

dphi5xsq3#

Java 不同的是,Dart允许覆盖==等运算符。因此,您可以定义自己的测试来检查此运算符是否相等。您还可以使用indentical函数来检查两个引用是否指向同一个对象(相当于 Java 中对象上的==)。
对于String s,它有点特殊。根据您示例化String的方式,您可以使用DartVM获得不同的结果:

main() {
  final s = "test";

  printTests(s, "test");
  // displays '==' => true    'identical' => true

  printTests(s, "$s");
  // displays '==' => true    'identical' => false

  printTests(s, new String.fromCharCodes(s.codeUnits));
  // displays '==' => true    'identical' => false
}

printTests(String s1, String s2) {
  print("'==' => ${s1 == s2}    'identical' => ${identical(s1, s2)}");
}

正如你所看到的,identical只在第一种情况下返回true,而==总是返回true。但这并不总是正确的。如果你在 dart2js 编译后在javascript中运行这段代码,identical==总是返回true
在大多数情况下,您希望比较String的值而不是它们的引用,因此您应该使用==

sc4hvdpw

sc4hvdpw4#

(For为了完整起见,这里有另一种比较两个字符串的方法。)
Dart中的String实现了Comparable接口。您可以使用compareTo来比较字符串。

String rubi = 'good';
String ore = 'good';

rubi.compareTo(ore) == 0;

但是,您需要检查NULL值。

5gfr0r5j

5gfr0r5j5#

有几种方法可以比较String。根据您的需要,您应该选择合适的解决方案:
1.使用运算符str 1 == str 2:如果str 1等于str 2,则该运算符返回true。否则,它返回false。当您想要确定字符串是否具有相同的代码单元序列时,该运算符非常有用。
1.使用**str1.compareTo(str 2)**方法:如果str 1的顺序在str 2之前,则该方法返回负值(-1),如果str 1的顺序在str 2之后,则返回正值(1),如果str 1和str 2相等,则返回零。如果要对字符串集合进行排序,则该方法很有用。

相关问题