如何比较Dart中的两个字符串,不区分大小写?
例如,我有这个清单:
var list = ['Banana', 'apple'];
我想对其进行排序,apple
在Banana
之前。
最终结果:
['apple', 'Banana'];
答案 0 :(得分:7)
Dart中没有不区分大小写的字符串比较函数(或者字符串相等函数)。基本上因为它很难,而且没有一个好的解决方案我们想要修复。
问题是正确进行不区分大小写的比较的方法是使用完整的Unicode case-folding(http://www.w3.org/International/wiki/Case_folding)和一个(可能是特定于语言环境的)排序产生的Unicode字符。 Unicode字符可能占用多个代码点,并且可以具有不同的表示形式,因此您可能还需要执行其他Unicode规范化。
所以,它非常复杂,需要一个相当大的桌子。
如果您已经拥有完整的Unicode库,那就太好了,如果您想要编译成小的JavaScript代码,那就不那么好了。
即使您只使用ASCII,您仍然需要弄清楚您希望订购的内容。是Z
< ^
? (作为ASCII码,它们是)。是^
< a
?同样,作为ASCII码,它们是。但你可能不希望Z
< a
在不区分大小写的情况下进行比较,因此为了保持一致性,您需要转换为大写或小写,并选择哪一个将更改a
和^
相互比较的方式。
collection
包具有compareAsciiUpperCase功能(小写相似),package:quiver
具有compareIgnoreCase
功能,两者都有toLowerCase()
功能参数。
您可以将其用作:
import "package:collection/collection.dart";
...
list.sort(compareAsciiUpperCase);
答案 1 :(得分:5)
没有内置的方法可以比较dart(as @lrn answered)中不区分大小写的字符串。
如果您只想比较不区分大小写的字符串,则可以在一个普通的地方声明以下方法:
bool equalsIgnoreCase(String string1, String string2) {
return string1?.toLowerCase() == string2?.toLowerCase();
}
示例:
equalsIgnoreCase("ABC", "abc"); // -> true
equalsIgnoreCase("123" "abc"); // -> false
equalsIgnoreCase(null, "abc"); // -> false
equalsIgnoreCase(null, null); // -> true
答案 2 :(得分:3)
一种方法,你可以在sort()方法中大写你的字符串:
list.sort((a, b) => a.toUpperCase().compareTo(b.toUpperCase()));
答案 3 :(得分:1)
您可以创建扩展功能:
extension StringExtensions on String {
bool containsIgnoreCase(String secondString) => this.toLowerCase().contains(secondString.toLowerCase());
//bool isNotBlank() => this != null && this.isNotEmpty;
}
用法:
if ("abcd".containsIgnoreCase("AB")) {
//true
}
答案 4 :(得分:0)
您可以使用变通来解决您的问题,在将它们与情人案例进行比较之前,只需设置所有字符串
答案 5 :(得分:-1)
您可以使用Google自己的quiver strings软件包。它具有equalsIgnoreCase函数。这是它的实现:
bool equalsIgnoreCase(String a, String b) =>
(a == null && b == null) ||
(a != null && b != null && a.toLowerCase() == b.toLowerCase());
答案 6 :(得分:-2)
我只是使用了内置的 .toLowerCase()
方法两次。我的用例是根据用户的搜索字符串创建一个子列表,如下所示:
_filteredItems =
_items.where((element) => element.strTitle.toLowerCase().contains(_searchText.toLowerCase())).toList();