compare numerical string java code example

Example 1: compare string integer java

/**
    * Similar to compareTo method But compareTo doesn't return correct result for string+integer strings something like `A11` and `A9`
*/

private int newCompareTo(String comp1, String comp2) {
  // If any value has 0 length it means other value is bigger
  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;

    // Loop through two strings and check how many strings are same
    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.

Tags:

Java Example