Sunday, October 9, 2011

atoi() in Java

Problem: Write a function to convert an ASCII string to integer, similar to atoi() function of C++.

Solution: The solution is too simple, it's simple checks for erroneous inputs that makes writing such a function fun.

public class AsciiToInteger {
  
 public static void main(String[] args) {
  AsciiToInteger instance = new AsciiToInteger();
  int x = instance.atoi("-683");
  System.out.println("Conversion is: " + x);
 }
 
 private int atoi(String number) {
  // check for NULL or empty
  if(number == null || number.trim().length() == 0) {
   throw new IllegalArgumentException("Number cannot be null/empty.");
  }
 
  // create a variable to store the result
  int result = 0;
   
  // trim the number
  number = number.trim();
   
  // check for sign as the first character
  boolean negate = false;
  char sign = number.charAt(0);
   
  if(sign == '+' || sign == '-') {
   if(sign == '-') {
    negate = true;
   }
    
   number = number.substring(1);
  }
   
  int length = number.length();
  for(int index = 0; index < length; index++) {
   char digit = number.charAt(index);
    
   // sanitize the digit
   if(!(digit >= '0' && digit <= '9')) {
    throw new IllegalArgumentException("Number contains characters other than digits at index " + index);
   }
    
   digit = (char) (digit - '0');
    
   result += (digit * Math.pow(10, (length - index - 1)));
  }
   
  // if negative, do it
  if(negate) {
   result = 0 - result;
  }
   
  // return the final result
  return result;
 }
 
}

0 comments:

Post a Comment