63 lines
2.4 KiB
Java
63 lines
2.4 KiB
Java
package eu.univento.commons.utils;
|
|
|
|
import java.lang.reflect.Array;
|
|
|
|
/**
|
|
* @author joethei, Alex Gitelman
|
|
* @version 1.0
|
|
*/
|
|
public class Strings {
|
|
|
|
/**
|
|
* Compares two version strings.
|
|
*
|
|
* Use this instead of String.compareTo() for a non-lexicographical
|
|
* comparison that works for version strings. e.g. "1.10".compareTo("1.6").
|
|
*
|
|
* @note It does not work if "1.10" is supposed to be equal to "1.10.0".
|
|
*
|
|
* @param str1 a string of ordinal numbers separated by decimal points.
|
|
* @param str2 a string of ordinal numbers separated by decimal points.
|
|
* @return The result is a negative integer if str1 is numerically less than str2.
|
|
* The result is a positive integer if str1 is numerically greater than str2.
|
|
* The result is zero if the strings are _numerically_ equals
|
|
*/
|
|
public static int versionCompare(String str1, String str2) {
|
|
String[] vals1 = str1.split("\\.");
|
|
String[] vals2 = str2.split("\\.");
|
|
int i = 0;
|
|
// set index to first non-equal ordinal or length of shortest version string
|
|
while (i < vals1.length && i < vals2.length && vals1[i].equals(vals2[i])) {
|
|
i++;
|
|
}
|
|
// compare first non-equal ordinal number
|
|
if (i < vals1.length && i < vals2.length) {
|
|
int diff = Integer.valueOf(vals1[i]).compareTo(Integer.valueOf(vals2[i]));
|
|
return Integer.signum(diff);
|
|
}
|
|
// the strings are equal or one string is a substring of the other
|
|
// e.g. "1.2.3" = "1.2.3" or "1.2.3" < "1.2.3.4"
|
|
return Integer.signum(vals1.length - vals2.length);
|
|
}
|
|
|
|
public static String[] remove(String[] array, String element) {
|
|
if (array.length > 0) {
|
|
int index = -1;
|
|
for (int i = 0; i < array.length; i++) {
|
|
if (array[i].equals(element)) {
|
|
index = i;
|
|
break;
|
|
}
|
|
}
|
|
if (index >= 0) {
|
|
String[] copy = (String[]) Array.newInstance(array.getClass().getComponentType(), array.length - 1);
|
|
if (copy.length > 0) {
|
|
System.arraycopy(array, 0, copy, 0, index);
|
|
System.arraycopy(array, index + 1, copy, index, copy.length - index);
|
|
}
|
|
return copy;
|
|
}
|
|
}
|
|
return array;
|
|
}
|
|
} |