比较版本号
比较两个版本号 version1 和 version2。
如果 version1 > version2 返回 1,如果 version1 < version2 返回 -1, 除此之外返回 0。
你可以假设版本字符串非空,并且只包含数字和 . 字符。
. 字符不代表小数点,而是用于分隔数字序列。
例如,2.5 不是“两个半”,也不是“差一半到三”,而是第二版中的第五个小版本。
你可以假设版本号的每一级的默认修订版号为 0。例如,版本号 3.4 的第一级(大版本)和第二级(小版本)修订号分别为 3 和 4。其第三级和第四级修订号均为 0。
示例 1:
输入: version1 = "0.1", version2 = "1.1"
输出: -1
思路+代码+注释:
public int compareVersion(String version1, String version2) {
/*
思路:首先将两个字符串按照.进行切割,短的字符串数组后面使用0进行和多的字符串数据元素进行比较这样就解决了末尾默认0的问题;
对于000010这种子字符串进行遍历找到第一个非0数字然后将从该数字开始的剩余数字添加到一个新str中作为新数字进行比较,这样就解决了000010这种
情况,进行数字比较
*/
String[] versionOneStrs=version1.split("\\.");
String[] versionTwoStrs=version2.split("\\.");
int maxLen=0;
if (versionOneStrs.length>=versionTwoStrs.length)
{
maxLen=versionOneStrs.length;
}else {
maxLen=versionTwoStrs.length;
}
for (int i = 0; i < maxLen; i++) {
String versionTwo="0";
String versionOne="0";
if (i<versionOneStrs.length)
{
versionOne=versionOneStrs[i];
}
if (i<versionTwoStrs.length)
{
versionTwo=versionTwoStrs[i];
}
if (!versionTwo.equals("0") && versionTwo.startsWith("0"))
{
StringBuilder sb=new StringBuilder();
for (int j = 0; j < versionTwo.length(); j++) {
//0000010结果应该是10
if (versionTwo.charAt(j)!='0')
{
for (int k = j; k < versionTwo.length(); k++) {
sb.append(versionTwo.charAt(k));
}
break;
}
}
//可能是000000这样的字符串,那么结果就为空串""
versionTwo=sb.toString();
if (versionTwo.equals(""))
{
versionTwo="0";
}
}
if (!versionOne.equals("0") && versionOne.startsWith("0"))
{
StringBuilder sb=new StringBuilder();
for (int j = 0; j < versionOne.length(); j++) {
if (versionOne.charAt(j)!='0')
{
for (int k = j; k < versionOne.length(); k++) {
sb.append(versionOne.charAt(k));
}
break;
}
}
versionOne=sb.toString();
if (versionOne.equals(""))
{
versionOne="0";
}
}
int versionO=Integer.parseInt(versionOne);
int versionT=Integer.parseInt(versionTwo);
if (versionO>versionT)
{
return 1;
}
if (versionO<versionT)
{
return -1;
}
}
return 0;
}