用dart写一个版本号的比较,结果返回-1,0,1
时间: 2023-10-02 12:10:11 浏览: 47
```dart
int compareVersion(String version1, String version2) {
List<String> v1 = version1.split('.');
List<String> v2 = version2.split('.');
int len = v1.length > v2.length ? v1.length : v2.length;
for(int i = 0; i < len; i++) {
int num1 = i < v1.length ? int.parse(v1[i]) : 0;
int num2 = i < v2.length ? int.parse(v2[i]) : 0;
if(num1 > num2) {
return 1;
} else if(num1 < num2) {
return -1;
}
}
return 0;
}
```
说明:
1. 首先将版本号字符串按照"."分割成数组。
2. 取两个版本号数组长度的最大值作为循环次数。
3. 循环比较每个版本号的数字大小,如果有一个版本号的数字比另一个版本号的数字大,就说明该版本号更高,返回1;如果有一个版本号的数字比另一个版本号的数字小,就说明该版本号更低,返回-1;如果两个版本号的数字相等,就继续比较下一个数字,直到比较完所有数字,返回0。
相关问题
用dart写一个版本号的比较,结果返回-1,0,1。版本号可能存在特殊字符,要剔除特殊字符。
以下是一个使用Dart编写的版本号比较函数,可以处理特殊字符:
```dart
int compareVersions(String version1, String version2) {
// 剔除特殊字符并分割版本号
List<String> v1 = version1.replaceAll(RegExp(r'[^\d\.]+'), '').split('.');
List<String> v2 = version2.replaceAll(RegExp(r'[^\d\.]+'), '').split('.');
// 将版本号补齐为相同长度
while (v1.length < v2.length) {
v1.add('0');
}
while (v2.length < v1.length) {
v2.add('0');
}
// 逐位比较版本号
for (int i = 0; i < v1.length; i++) {
int num1 = int.parse(v1[i]);
int num2 = int.parse(v2[i]);
if (num1 < num2) {
return -1;
} else if (num1 > num2) {
return 1;
}
}
// 版本号完全相同
return 0;
}
```
这个函数首先使用正则表达式从版本号中剔除特殊字符,并将版本号分割成数字部分。然后将两个版本号补齐为相同长度,以便逐位比较。最后,如果两个版本号的数字部分完全相同,则返回0;如果版本号1小于版本号2,则返回-1;否则返回1。
用dart写一个版本校验
以下是使用Dart编写的版本校验代码示例:
```dart
bool isVersionValid(String version) {
// 正则表达式匹配版本号格式
RegExp versionPattern = RegExp(r'^\d+\.\d+\.\d+$');
if (!versionPattern.hasMatch(version)) {
return false;
}
// 将版本号分割成主版本、次版本和修订版本号
List<String> parts = version.split('.');
int major = int.tryParse(parts[0]);
int minor = int.tryParse(parts[1]);
int patch = int.tryParse(parts[2]);
// 版本号必须是正整数
if (major == null || minor == null || patch == null) {
return false;
}
// 版本号不能小于0
if (major < 0 || minor < 0 || patch < 0) {
return false;
}
return true;
}
```
使用示例:
```dart
void main() {
String version = '1.2.3';
if (isVersionValid(version)) {
print('版本号 $version 格式正确');
} else {
print('版本号 $version 格式错误');
}
}
```