how to compare strings in java that have numbers code example
Example 1: compare string integer java
private int newCompareTo(String comp1, String comp2) {
if (comp1.length() == 0) {
if (comp2.length() == 0) {
return 0;
}
return -1;
} else if (comp2.length() == 0) {
return 1;
}
if (TextUtils.isDigitsOnly(comp1)) {
int val1 = Integer.parseInt(comp1);
if (TextUtils.isDigitsOnly(comp2)) {
int val2 = Integer.parseInt(comp2);
return Integer.compare(val1, val2);
} else {
return comp1.compareTo(comp2);
}
} else {
int minVal = Math.min(comp1.length(), comp2.length()), sameCount = 0;
for (int i = 0;i < minVal;i++) {
char leftVal = comp1.charAt(i), rightVal = comp2.charAt(i);
if (leftVal == rightVal) {
sameCount++;
} else {
break;
}
}
if (sameCount == 0) {
return comp1.compareTo(comp2);
} else {
String newStr1 = comp1.substring(sameCount), newStr2 = comp2.substring(sameCount);
if (TextUtils.isDigitsOnly(newStr1) && TextUtils.isDigitsOnly(newStr2)) {
return Integer.compare(Integer.parseInt(newStr1), Integer.parseInt(newStr2));
} else {
return comp1.compareTo(comp2);
}
}
}
}
Example 2: string integer compare java
num == Integer.parseInt(str) is going to faster than str.equals("" + num)
str.equals("" + num) will first convert num to string which is O(n) where n being the number of digits in the number. Then it will do a string concatenation again O(n) and then finally do the string comparison. String comparison in this case will be another O(n) - n being the number of digits in the number. So in all ~3*O(n)
num == Integer.parseInt(str) will convert the string to integer which is O(n) again where n being the number of digits in the number. And then integer comparison is O(1). So just ~1*O(n)
To summarize both are O(n) - but str.equals("" + num) has a higher constant and so is slower.