一.双指针遍历截取
import java.util.*;
public class Solution {
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
* 比较版本号
* @param version1 string字符串
* @param version2 string字符串
* @return int整型
*/
public int compare (String version1, String version2) {
// write code here
/**
* 第二个大,返回-1,
* 第一个大,返回1
*/
if (version1 == null) return -1;
if (version2 == null) return 1;
//记录两个字符串的大小
int n1 = version1.length();
int n2 = version2.length();
//定义双指针遍历字符串
int i = 0,j = 0;
while (i < n1 || j < n2) {
//用long防止溢出
long num1 = 0;
//把多余的0减掉
while (i < n1 && version1.charAt(i) != '.') {
num1 = num1 * 10 + (version1.charAt(i) - '0');
i++;
}
//跳过字符‘.’
i++;
//用long防止溢出
long num2 = 0;
//把多余的0减掉
while (j < n2 && version2.charAt(j) != '.') {
num2 = num2 * 10 + (version2.charAt(j) - '0');
j++;
}
//跳过字符‘.’
j++;
//判断谁大
if (num1 > num2) return 1;
if (num1 < num2) return -1;
}
return 0;
}
}
二.分割截取
import java.util.*;
public class Solution {
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
* 比较版本号
* @param version1 string字符串
* @param version2 string字符串
* @return int整型
*/
public int compare (String version1, String version2) {
// write code here
if (version1 == null) return -1;
if (version2 == null) return 1;
/**
* 以点为分割符
*/
String[] s1 = version1.split("\\.");
String[] s2 = version2.split("\\.");
//遍历字符串数组
for (int i = 0; i < s1.length || i < s2.length; i++) {
//小的版本号后末尾全部补0
String str1 = i < s1.length ? s1[i]:"0";
String str2 = i < s2.length ? s2[i]:"0";
//用long防止溢出
long num1 = 0;
for (int j = 0; j < str1.length(); j++) {
num1 = num1 * 10 + (str1.charAt(j) - '0');
}
long num2 = 0;
for (int j = 0; j < str2.length(); j++) {
num2 = num2 * 10 + (str2.charAt(j) - '0');
}
if (num1 > num2) return 1;
if (num1 < num2) return -1;
}
return 0;
}
}