public class AtoiItoa {
public static int atoi(String text) {
int value = 0;
boolean negativeFlag = false;
if(text.charAt(0) == '-') {
negativeFlag = true;
} else {
value += text.charAt(0) - '0';
}
for (int i = 1; i < text.length(); i++) {
char num = text.charAt(i);
int digit;
if ('0' <= num && num <= '9') {
digit = num - '0';
} else {
break;
}
value = (value * 10) + digit;
}
return negativeFlag? value * (-1) : value;
}
public static String itoa(int num) {
StringBuilder sb = new StringBuilder();
if (num < 0) {
num *= -1;
sb.append('-');
}
for (int i = (int) Math.log10(num); i >= 0; i--) {
int log = (int) Math.log10(num);
int toAdd = num / (int) Math.pow(10, log);
sb.append((char) (toAdd + '0'));
num -= toAdd* ((int) Math.pow(10, log));
}
return sb.toString();
}
public static void main(String[] args) {
System.out.println(atoi("2468") * 2); // 4936
System.out.println(atoi("-2468") * 2); // -4936
System.out.println(itoa(1234) + 'a'); // 1234a
System.out.println(itoa(-1234) + 'a'); // -1234a
}
}
숫자로 이루어진 String을 integer 자료형으로, integer를 String으로 바꿔주는 메서드이다. Integer.toString, Integer.parseInt 메서드가 이미 존재하지만, itoa와 atoi를 직접 구현해보았다.
public static int atoi(String text) {
int value = 0;
boolean negativeFlag = false;
if(text.charAt(0) == '-') {
negativeFlag = true;
} else {
value += text.charAt(0) - '0';
}
for (int i = 1; i < text.length(); i++) {
char num = text.charAt(i);
int digit;
if ('0' <= num && num <= '9') {
digit = num - '0';
} else {
break;
}
value = (value * 10) + digit;
}
return negativeFlag? value * (-1) : value;
}
만일 첫 문자가 '-'일 경우 negativeFlag를 true로 바꾸어 나중에 음수로 출력시켜준다.
문자열을 하나씩 읽어가면서, 숫자를 하나씩 더한 후 10을 곱해주는 식으로 return값을 구성하였다.
public static String itoa(int num) {
StringBuilder sb = new StringBuilder();
if (num < 0) {
num *= -1;
sb.append('-');
}
for (int i = (int) Math.log10(num); i >= 0; i--) {
int log = (int) Math.log10(num);
int toAdd = num / (int) Math.pow(10, log);
sb.append((char) (toAdd + '0'));
num -= toAdd* ((int) Math.pow(10, log));
}
return sb.toString();
}
itoa는 StringBuilder에 숫자를 하나씩 읽어가며 append해주었다. 만일 음수일 경우에는 맨 앞에 '-'를 추가해준다.
public static void main(String[] args) {
System.out.println(atoi("2468") * 2); // 4936
System.out.println(atoi("-2468") * 2); // -4936
System.out.println(itoa(1234) + 'a'); // 1234a
System.out.println(itoa(-1234) + 'a'); // -1234a
}
}
정상적으로 잘 작동한다.