两个字符串型的版本怎样比较? 比如1.1.1>1.0.101.10.1>1.2.10 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 int compare(String s1, String s2) { String[] v1 = s1.split("\\."); String[] v2 = s2.split("\\."); if (v1.length < v2.length) { //如果版本.长度不一样,后面的缺省为0,如果保证长度一样,这里可以不需要 String[] t = new String[v2.length]; System.copyarray(v1, 0, t, 0, v1.length); for (int i=0; i<t.length; i++) {t[i]="0";} v1 = t; } else if (v1.length > v2.length) { String[] t = new String[v1.length]; System.copyarray(v2, 0, t, 0, v2.length); for (int i=0; i<t.length; i++) {t[i]="0";} v2 = t; } for (int i=0; i<v1.length; i++) { int n1 = Integer.valueOf(v1[i]).intValue(); int n2 = Integer.valueOf(v2[i]).intValue(); if (n1 != n2) { return (n1 - n2); //大于0则s1版本大,小于0则s2版本大 } } return 0; //相等} 上面的for (int i=0; i<t.length; i++) {t[i]="0";}改为for (int i=v1.length; i<t.length; i++) {t[i]="0";} //或v2.length package houlei.csdn.text;public class VersionComparator { private VersionComparator(){} public static int compare(String ver1,String ver2){ String v1 [] = ver1.split("\\."); String v2 [] = ver2.split("\\."); return compare(v1,v2,0); } private static int compare(String[] v1, String[] v2, int i) { if(i<v1.length && i<v2.length){ int c = Integer.valueOf(v1[i].trim()).compareTo(Integer.valueOf(v2[i].trim())); if(c!=0){ return c; } return compare(v1, v2, ++i); }else if(v1.length==v2.length){ return Integer.valueOf(v1[--i].trim()).compareTo(Integer.valueOf(v2[i].trim())); }else if(i>=v1.length){ return -1; } return 1; }} int compare(str1, str2) { String v1[] = ver1.split("\\."); String v2[] = ver2.split("\\."); return compare(v1, v2, 0);}int compare(String[] str1, String[] str2, int i) { if (str1.length > i) { int i1 = Integer.parseInt(str1[i]); int i2 = Integer.parseInt(str2[i]); if (i1 < i2) { return -1; } else if (i1 > i2) { return 1; } else { i++; compare(str1, str2, i); } } else { return 0; }} 算了,去掉数组补长吧int compare(String s1, String s2) { String[] v1 = s1.split("\\."); String[] v2 = s2.split("\\."); int maxLen = (v1.length>v2.length) ? v1.length : v2.length; for (int i=0; i<maxLen; i++) { if (i<v1.length && i<v2.length) { int n1 = Integer.valueOf(v1[i]).intValue(); int n2 = Integer.valueOf(v2[i]).intValue(); if (n1 != n2) {return (n1-n2);} } else { int n = (v1.length>v2.length) ? Integer.valueOf(v1[i]).intValue() : Integer.valueOf(v2[i]).intValue()*(-1); if (n != 0) {return n;} } } return 0; //相等} /*比如1.1.1>1.0.101.10.1>1.2.10*/import java.util.regex.Matcher;import java.util.regex.Pattern;public class Test{ public static void main(String[] args){ String str1 = "1.10.1"; String str2 = "1.12.10"; int result = compare(str1,str2); if(result > 0){ System.out.println(str1 + " > " + str2); }else if(result < 0){ System.out.println(str1 + " < " + str2); }else{ System.out.println(str1 + " == " + str2); } } private static int compare(String str1,String str2){ String regex = "[^.]+"; Pattern pattern = Pattern.compile(regex); Matcher matcher1 = pattern.matcher(str1); Matcher matcher2 = pattern.matcher(str2); int result = 0; while(matcher1.find() && matcher2.find()){ result = compareStr(matcher1.group(),matcher2.group()); if(result != 0){ return result; } } return compareStr(str1,str2); } private static int compareStr(String str1,String str2){ //长度长的为大 if(str1.length() > str2.length()){ return 1; } if(str2.length() > str1.length()){ return -1; } //长度相同时候采用正常比较 return str1.compareTo(str2); }} 为啥要弄那么麻烦嘛,这也就是比较两个字符串的大小,System.out.println("1.1.1".compareTo("1.0.10"));System.out.println("1.10.1".compareTo("1.20.10"));这样就能知道哪个版本大了嘛。 返回1为大,-1为小,0相等。 String str1 = "1.1.1"; String str2 = "1.0.10"; List l = new ArrayList(); l.add(str1); l.add(str2); Collections.sort(l); Collections.reverse(l); System.out.print(l.get(0)+">"+l.get(1)); 直接比较字符串,是不行的。楼上可以试试System.out.println("1.1".compareTo("1.10"));System.out.println("1.1".compareTo("1.2"));两者的结果应该不一样,呵呵。 System.out.println("1.1".compareTo("1.10"));System.out.println("1.1".compareTo("1.2"));结果一样.都是前者比后者小 swing中的jtextfield中能否放入图片,想做富文本框,有这个功能么? 如何中断正在运行的非阻塞线程? 几个java相关的算法集锦,多多指正,还有什么其它好的例子请补充?学习贴. 多进程文本读取的问题 要在论坛提问,先问你尽力了吗? 请高手指点 请问:windows下使用mysql的注册方法? 谁有IBM WebSphere Studio Application v5的英文版的下载网址和解密方法,兄弟定高分相送! 超级简单的问题!在线等! 从数据库中取出数据的有问题! java如何连接sql2005呢 文件读写出现差异
String[] v1 = s1.split("\\.");
String[] v2 = s2.split("\\.");
if (v1.length < v2.length) { //如果版本.长度不一样,后面的缺省为0,如果保证长度一样,这里可以不需要
String[] t = new String[v2.length];
System.copyarray(v1, 0, t, 0, v1.length);
for (int i=0; i<t.length; i++) {t[i]="0";}
v1 = t;
} else if (v1.length > v2.length) {
String[] t = new String[v1.length];
System.copyarray(v2, 0, t, 0, v2.length);
for (int i=0; i<t.length; i++) {t[i]="0";}
v2 = t;
} for (int i=0; i<v1.length; i++) {
int n1 = Integer.valueOf(v1[i]).intValue();
int n2 = Integer.valueOf(v2[i]).intValue();
if (n1 != n2) {
return (n1 - n2); //大于0则s1版本大,小于0则s2版本大
}
}
return 0; //相等
}
改为
for (int i=v1.length; i<t.length; i++) {t[i]="0";} //或v2.length
public static int compare(String ver1,String ver2){
String v1 [] = ver1.split("\\.");
String v2 [] = ver2.split("\\.");
return compare(v1,v2,0);
}
private static int compare(String[] v1, String[] v2, int i) {
if(i<v1.length && i<v2.length){
int c = Integer.valueOf(v1[i].trim()).compareTo(Integer.valueOf(v2[i].trim()));
if(c!=0){
return c;
}
return compare(v1, v2, ++i);
}else if(v1.length==v2.length){
return Integer.valueOf(v1[--i].trim()).compareTo(Integer.valueOf(v2[i].trim()));
}else if(i>=v1.length){
return -1;
}
return 1;
}}
String v1[] = ver1.split("\\.");
String v2[] = ver2.split("\\.");
return compare(v1, v2, 0);
}
int compare(String[] str1, String[] str2, int i) {
if (str1.length > i) {
int i1 = Integer.parseInt(str1[i]);
int i2 = Integer.parseInt(str2[i]);
if (i1 < i2) {
return -1;
} else if (i1 > i2) {
return 1;
} else {
i++;
compare(str1, str2, i);
}
} else {
return 0;
}
}
int compare(String s1, String s2) {
String[] v1 = s1.split("\\.");
String[] v2 = s2.split("\\.");
int maxLen = (v1.length>v2.length) ? v1.length : v2.length;
for (int i=0; i<maxLen; i++) {
if (i<v1.length && i<v2.length) {
int n1 = Integer.valueOf(v1[i]).intValue();
int n2 = Integer.valueOf(v2[i]).intValue();
if (n1 != n2) {return (n1-n2);}
} else {
int n = (v1.length>v2.length) ? Integer.valueOf(v1[i]).intValue() : Integer.valueOf(v2[i]).intValue()*(-1);
if (n != 0) {return n;}
}
}
return 0; //相等
}
比如
1.1.1>1.0.10
1.10.1>1.2.10
*/
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Test{
public static void main(String[] args){
String str1 = "1.10.1";
String str2 = "1.12.10"; int result = compare(str1,str2); if(result > 0){
System.out.println(str1 + " > " + str2);
}else if(result < 0){
System.out.println(str1 + " < " + str2);
}else{
System.out.println(str1 + " == " + str2);
}
} private static int compare(String str1,String str2){
String regex = "[^.]+";
Pattern pattern = Pattern.compile(regex);
Matcher matcher1 = pattern.matcher(str1);
Matcher matcher2 = pattern.matcher(str2);
int result = 0;
while(matcher1.find() && matcher2.find()){
result = compareStr(matcher1.group(),matcher2.group());
if(result != 0){
return result;
}
} return compareStr(str1,str2);
} private static int compareStr(String str1,String str2){
//长度长的为大
if(str1.length() > str2.length()){
return 1;
} if(str2.length() > str1.length()){
return -1;
} //长度相同时候采用正常比较 return str1.compareTo(str2);
}
}
System.out.println("1.1.1".compareTo("1.0.10"));
System.out.println("1.10.1".compareTo("1.20.10"));
这样就能知道哪个版本大了嘛。 返回1为大,-1为小,0相等。
String str2 = "1.0.10";
List l = new ArrayList();
l.add(str1);
l.add(str2);
Collections.sort(l);
Collections.reverse(l);
System.out.print(l.get(0)+">"+l.get(1));
楼上可以试试
System.out.println("1.1".compareTo("1.10"));
System.out.println("1.1".compareTo("1.2"));
两者的结果应该不一样,呵呵。
System.out.println("1.1".compareTo("1.2"));
结果一样.都是前者比后者小