'Code Study/1000자리 구분자'에 해당되는 글 4건
- 2015.03.08 숫자 구분자 처리 (Digit group separators) 슬라이드
- 2015.03.08 1000자리 구분자, 문자 타입 처리 및 수행 시간 측정 (2)
- 2015.03.08 1000자리 구분자, 문자 타입 처리 및 수행 시간 측정
- 2015.03.08 1000자리 구분자, 숫자 타입 처리 및 수행 시간 측정
2015. 3. 8. 02:15
2015. 3. 8. 02:13
package digitGroup; /** * 10진수를 입력받아, 천(1000)자리 구분자를 추가하는 프로그램. */ public class DigiGroupAsStr2 { public static void main(String args[]) { int loopCount = 1000000; for (int idx = 0; idx < 10; idx++) { long startMilliTime = System.currentTimeMillis(); benchmark(10, 10, loopCount); long endMilliTime = System.currentTimeMillis(); System.out.println(loopCount + ";" + (endMilliTime - startMilliTime)); loopCount += 1000000; } } private static void benchmark(int startNum, int interval, int loopCount) { int inputNumber = startNum; for (int cnt = 0; cnt < loopCount; cnt++) { convert(inputNumber); inputNumber += interval; } } private static String convert(int number) { final char THOUSANDS_SEPARATOR = ','; // 입력 숫자를 문자열 타입으로 변환 String numberAsStr = String.valueOf(number); StringBuilder sb = new StringBuilder(numberAsStr.length() / 3 + numberAsStr.length()); // 맨 앞부분에서 잘라낼 길이를 계산하고, 출력 버퍼에 담는다. int firstPos = numberAsStr.length() % 3; int charIdx = 0; for(; charIdx<firstPos; charIdx++) { sb.append(numberAsStr.charAt(charIdx)); } int counter = 0; for(; charIdx<numberAsStr.length(); charIdx++) { if(counter % 3 == 0 && numberAsStr.length() > 3) { sb.append(THOUSANDS_SEPARATOR); } counter ++; sb.append(numberAsStr.charAt(charIdx)); } return sb.toString(); } }
2015. 3. 8. 02:11
package digitGroup; /** * 10진수를 입력받아, 천(1000)자리 구분자를 추가하는 프로그램. */ public class DigiGroupAsStr { public static void main(String args[]) { int loopCount = 1000000; for(int idx=0; idx<10; idx++) { long startMilliTime = System.currentTimeMillis(); benchmark(10, 10, loopCount); long endMilliTime = System.currentTimeMillis(); System.out.println( loopCount + ";" + (endMilliTime - startMilliTime)); loopCount += 1000000; } } private static void benchmark(int startNum, int interval, int loopCount) { int inputNumber = startNum; for(int cnt=0; cnt<loopCount; cnt++) { convert(inputNumber); inputNumber += interval; } } private static String convert(int number) { final char THOUSANDS_SEPARATOR = ','; StringBuilder sb = new StringBuilder(); // 입력 숫자를 문자열 타입으로 변환 String numberAsStr = String.valueOf(number); // 맨 앞부분에서 잘라낼 길이를 계산하고, 출력 버퍼에 담는다. int separationIndex = numberAsStr.length() % 3; sb.append(numberAsStr.substring(0, separationIndex)); // 숫자의 나머지를 3자리씩 잘라서 구분자와 함께 추가한다. while(separationIndex < numberAsStr.length()) { if(separationIndex > 0) { sb.append(THOUSANDS_SEPARATOR); } sb.append(numberAsStr.substring(separationIndex, separationIndex+3)); separationIndex += 3; } return sb.toString(); } }
2015. 3. 8. 02:05
DigitGroupAsInt.java
package digitGroup; import java.util.Stack; /** * 10진수를 입력받아, 천(1000)자리 구분자를 추가하는 프로그램. * (숫자 타입 처리 및 수행 시간 측정) */ public class DigitGroupAsInt { public static void main(String args[]) { int loopCount = 1000000; for(int idx=0; idx<10; idx++) { long startMilliTime = System.currentTimeMillis(); benchmark(10, 10, loopCount); long endMilliTime = System.currentTimeMillis(); System.out.println( loopCount + ";" + (endMilliTime - startMilliTime)); loopCount += 1000000; } } private static void benchmark(int startNum, int interval, int loopCount) { int inputNumber = startNum; for(int cnt=0; cnt<loopCount; cnt++) { convert(inputNumber); inputNumber += interval; } } private static String convert(int number) { final int DECIMAL_NUMBER = 10; final char THOUSANDS_SEPARATOR = ','; Stack<Character> digitStack = new Stack<Character>(); StringBuilder sb = new StringBuilder(); int quotient, spare, count = 0; do { // 몫과 나머지 계산 quotient = number / DECIMAL_NUMBER; spare = number % DECIMAL_NUMBER; // 몫을 n 에 재할당, 나머지는 스택에 추가 number = quotient; digitStack.push(Character.forDigit(spare, 10)); // 3개의 숫자를 추가했다면, 구분자를 버퍼에 추가 if (++count == 3 && quotient > 0) { digitStack.push(THOUSANDS_SEPARATOR); count = 0; } } while (quotient > 0); // 스택에 저장된 숫자를 꺼내 문자열 버퍼에 추가 while (!digitStack.empty()) { sb.append(digitStack.pop()); } return sb.toString(); } }