0%

Dart中判断字符串是否为空

问题

在 Dart 中判断字符串是否为空,我们可以通过 isEmptyisNotEmpty 来处理。

但是,在Dart中 String 默认值为 null:

dart version < 2.12:

1
2
3
4
void main(){
String a;
print(a); // null
}

dart version >= 2.12:

1
2
3
4
void main(){
String? ss;
print(ss); // null
}

这个时候如果通过 isEmpty 去判断该字符串是否为空时,可能会遇到下面的报错:

The getter ‘isEmpty’ was called on null

相应的解决方法就是通过使用 ?! 来处理:

if message returns null. You might want:

1
if(message?.isEmpty ?? true)

不过有时候就会感觉这样处理起来就会很繁琐。

像在 C# 中对于字符串的处理,就有 isNullOrEmpty 的方法来判断字符串是否为 null空字符串 ,然而在 Dart 中却没有提供类似于 isNullOrEmpty 的方法,flutter issues 中相关的讨论表示也不会提供:


如何解决

既然官方没有提供,那我们可以自己来实现相应的处理方法来解决。

帮助类或扩展方法

我们可以通过帮助类或者扩展方法来实现。

帮助类不必多说。对于扩展方法,可以参考如下的示例:

扩展:

1
2
3
4
5
6
extension NumberParsing on String {
int parseInt() {
return int.parse(this);
}
// ···
}

使用:

1
2
3
import 'string_apis.dart';
// ···
print('42'.parseInt()); // Use an extension method.

完整的实现代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
void main() {
String? ss;
print(ss);

// ss = " ";
// ss="hello";

print(ss);

print('isNullOrEmpty: ${ss.isNullOrEmpty()}');
print('isNotNullAndEmpty: ${ss.isNotNullAndEmpty()}');
print('getStrValue: ${ss.getStrValue(val: "x")}');

print('-------');

print('StrUtils.isNullOrEmpty: ${StrUtils.isNullOrEmpty(ss)}');
print('StrUtils.isNotNullAndEmpty: ${StrUtils.isNotNullAndEmpty(ss)}');
print('StrUtils.getStrValue: ${StrUtils.getStrValue(ss)}');
}

// use Extension

extension StringExtensions on String? {
/// string is null or empty
bool isNullOrEmpty() => this == null || this!.trim().isEmpty;

/// string not null and empty
bool isNotNullAndEmpty() => this != null && this!.trim().isNotEmpty;

/// if string is null or empty ,return default value

// String getNullOrEmptyVal({String val = ""}) {
// if(this.isNullOrEmpty()){
// return val;
// }
// return this!;
// }

String getStrValue({String val = ""}) => this.isNullOrEmpty() ? val : this!;
}

// use Function

class StrUtils {
StrUtils._();

/// string is null or empty
static bool isNullOrEmpty(String? s) => s == null || s.trim().isEmpty;

/// string not null and empty
static bool isNotNullAndEmpty(String? s) => s != null && s.trim().isNotEmpty;

/// if string is null or empty ,return default value
static String getStrValue(String? s, {String val = ""}) =>
isNullOrEmpty(s) ? val : s!;
}

可以在 DartPad 中查看运行结果:Dart String add isNullOrEmpty

附:Extension methods | Dart


第三方插件

当然,除了自己实现,也可以使用 quiver 插件来解决。

具体可查看:quiver - pub.dev

相应的源码:quiver-dart/strings.dart at master · google/quiver-dart


如有疑问或需要技术讨论,请留言或发邮件到 service@itfanr.cc