====== String Util Service ====== ===== 개요 ===== 시스템을 개발할 때 필요한 문자열 데이터를 다루기 위해 다양한 기능을 사용하도록 서비스한다. 문자열을 다루는 **EgovStringUtil Service**와 숫자를 다루는 **EgovNumericUtil Service**, 날짜형식을 다루는 **EgovDateUtil Service** 그리고 객체 생성 등의 **EgovObjectUtil Service** 4가지가 있다. ===== 설명 ===== ==== 1. EgovStringUtil Service ==== === Pattern matching === String이 특정 Pattern(정규표현식)에 부합하는지 검사한다. == Sample Source == @Test public void testPatternMatch() throws Exception { // pattern match 성공 String str = "abc-def"; pattern = "*-*"; assertTrue(EgovStringUtil.isPatternMatching(str, pattern)); // pattern match 실패 str = "abc"; assertTrue(!EgovStringUtil.isPatternMatching(str, pattern)); } === Formatting === 다양한 타입의 데이터를 특정 String형식(Format)으로 변환한다. == Sample Source == @Test public void testTypeConversion() throws Exception { // int => string assertEquals("1", EgovStringUtil.integer2string(1)); // long => string assertEquals("1000000000", EgovStringUtil.long2string(1000000000)); // float => string assertEquals("34.5", EgovStringUtil.float2string(34.5f)); // double => string assertEquals("34.5", EgovStringUtil.double2string(34.5)); // string => int assertEquals(1, EgovStringUtil.string2integer("1")); assertEquals(0, EgovStringUtil.string2integer(null, 0)); // string => float assertEquals(Float.valueOf(34.5f), Float.valueOf(EgovStringUtil.string2float("34.5"))); assertEquals(Float.valueOf(10.5f), Float.valueOf(EgovStringUtil.string2float(null, 10.5f))); // string => double assertEquals(Double.valueOf(34.5), Double.valueOf(EgovStringUtil.string2double("34.5"))); assertEquals(Double.valueOf(34.5), Double.valueOf(EgovStringUtil.string2double(null, 34.5))); // string => long assertEquals(100000000, EgovStringUtil.string2long("100000000")); assertEquals(100000000, EgovStringUtil.string2long(null, 100000000)); } === Substring === 전체 String 중 일부를 가져온다. == Sample Source == @Test public void testToSubString() throws Exception { String source = "substring test"; assertEquals("test", EgovStringUtil.toSubString(source, 10)); assertEquals("string", EgovStringUtil.toSubString(source, 3, 9)); } === Trim === 전체 String 중 앞뒤에 존재하는 공백 문자(white character)를 제거한다. == Sample Source == @Test public void testStringTrim() throws Exception { String str = " substring "; assertEquals("substring" , EgovStringUtil.trim(str)); assertEquals("substring ", EgovStringUtil.ltrim(str)); assertEquals(" substring", EgovStringUtil.rtrim(str)); } === Concatenate === 두 String을 붙여서 하나의 String을 생성한다. == Sample Source == @Test public void testConcat() throws Exception { String str1 = "substring"; String str2 = "test"; assertEquals("substringtest", EgovStringUtil.concat(str1, str2)); } === Find === 전체 String 중 특정 String Pattern이 있는지 찾는다. == Sample Source == @Test public void testFindPattern() throws Exception { String pattern = "\\d{4}-\\d{1,2}-\\d{1,2}"; // 일치하는 pattern 을 찾는다. Matcher matcher = Pattern.compile(pattern).matcher("2009-02-03"); assertTrue(matcher.find()); // 일치하는 pattern 을 찾는다. matcher = Pattern.compile(pattern).matcher("abcdef2009-02-03abcdef"); assertTrue(matcher.find()); // 일치하는 pattern 을 찾지 못한다. matcher = Pattern.compile(pattern).matcher("abcdef2009-02-A3abcdef"); assertFalse(matcher.find()); } ==== 2. EgovNumericUtil Service ==== 숫자체크, 더하기, 빼기, 곱하기, 나누기, 올림, 내림 기능 === 숫자체크 기능 === 주어진 문자열이 숫자형식인지 검사한다. == Sample Source == @Test public void testIsNumber() throws Exception { assertFalse(EgovNumericUtil.isNumber("abc")); assertFalse(EgovNumericUtil.isNumber("!@")); assertFalse(EgovNumericUtil.isNumber("ab-123")); assertTrue(EgovNumericUtil.isNumber("-123")); assertTrue(EgovNumericUtil.isNumber("1234")); } === 더하기 기능 === 두 문자열 값의 덧셈을 실행한다. == Sample Source == @Test public void testPlus() throws Exception { assertEquals("400", EgovNumericUtil.plus("151", "249")); assertEquals("400.0000", EgovNumericUtil.plus("151.7531", "248.2469")); assertEquals("400.000", EgovNumericUtil.plus("151.7531", "248.2469", 3)); assertEquals("399.9654", EgovNumericUtil.plus("151.7531", "248.2123")); assertEquals("399.966", EgovNumericUtil.plus("151.7531", "248.2123", 3, EgovNumericUtil.ROUND_UP)); assertEquals("399.965", EgovNumericUtil.plus("151.7531", "248.2123", 3, EgovNumericUtil.ROUND_DOWN)); assertEquals("399.97", EgovNumericUtil.plus("151.7531", "248.2123", 2, EgovNumericUtil.ROUND_HALF_UP)); } === 빼기 기능 === 두 문자열 값의 뺄셈을 실행한다. == Sample Source == @Test public void testMinus() throws Exception { assertEquals("89", EgovNumericUtil.minus("240", "151")); assertEquals("96.4938", EgovNumericUtil.minus("248.2469", "151.7531")); assertEquals("96.49380", EgovNumericUtil.minus("248.2469", "151.7531", 5)); assertEquals("96.4592", EgovNumericUtil.minus("248.2123", "151.7531")); assertEquals("96.460", EgovNumericUtil.minus("248.2123", "151.7531", 3, EgovNumericUtil.ROUND_UP)); assertEquals("96.459", EgovNumericUtil.minus("248.2123", "151.7531", 3, EgovNumericUtil.ROUND_DOWN)); assertEquals("96.46", EgovNumericUtil.minus("248.2123", "151.7531", 2, EgovNumericUtil.ROUND_HALF_UP)); } === 곱하기 기능 === 두 문자열 값의 곱셈을 실행한다. == Sample Source == @Test public void testMultiply() throws Exception { assertEquals("180", EgovNumericUtil.multiply("15", "12")); assertEquals("189.6135", EgovNumericUtil.multiply("15.23", "12.45")); assertEquals("189.61350", EgovNumericUtil.multiply("15.23", "12.45", 5)); assertEquals("189.614", EgovNumericUtil.multiply("15.23", "12.45", 3, EgovNumericUtil.ROUND_UP)); assertEquals("189.613", EgovNumericUtil.multiply("15.23", "12.45", 3, EgovNumericUtil.ROUND_DOWN)); assertEquals("189.61", EgovNumericUtil.multiply("15.23", "12.45", 2, EgovNumericUtil.ROUND_HALF_UP)); } === 나누기 기능 === 두 문자열 값의 나눗셈을 실행한다. == Sample Source == @Test public void testDivide() throws Exception { assertEquals("1.25", EgovNumericUtil.divide("15", "12")); Class exceptionClass = null; try { assertEquals("1.2232931726907630522088353413655", EgovNumericUtil.divide("15.23", "12.45")); } catch (Exception e) { log.error("### Exception : " + e.toString()); exceptionClass = (Class) e.getClass(); } finally { assertEquals(ArithmeticException.class, exceptionClass); } assertEquals("1.22", EgovNumericUtil.divide("15.23", "12.45", 5)); assertEquals("1.224", EgovNumericUtil.divide("15.23", "12.45", 3, EgovNumericUtil.ROUND_UP)); assertEquals("1.223", EgovNumericUtil.divide("15.23", "12.45", 3, EgovNumericUtil.ROUND_DOWN)); assertEquals("1.22", EgovNumericUtil.divide("15.23", "12.45", 2, EgovNumericUtil.ROUND_HALF_UP)); } === 올림, 내림 기능 === 주어진 값의 반올림, 올림, 내림을 실행한다. == Sample Source == @Test public void testScale() throws Exception { assertEquals("151.754", EgovNumericUtil.setScale("151.7531", 3, EgovNumericUtil.ROUND_UP)); assertEquals("151.753", EgovNumericUtil.setScale("151.7531", 3, EgovNumericUtil.ROUND_DOWN)); assertEquals("151.753", EgovNumericUtil.setScale("151.7531", 3, EgovNumericUtil.ROUND_HALF_UP)); } ==== 3. EgovDateUtil Service ==== 날짜계산, 현재일자 조회, 요일, 날짜형식체크 기능 === 날짜계산 기능 === 주어진 날짜에 해당 년,월 또는 일자를 더하여 계산된 일자를 조회한다. == Sample Source == @Test public void testCalcDate() throws Exception { assertEquals("20100114", EgovDateUtil.getCalcDateAsString ("2009", "3", "20", 300, "day")); assertEquals("2010", EgovDateUtil.getCalcYearAsString ("2009", "3", "20", 300, "day")); assertEquals("01", EgovDateUtil.getCalcMonthAsString("2009", "3", "20", 300, "day")); assertEquals("14", EgovDateUtil.getCalcDayAsString ("2009", "3", "20", 300, "day")); assertEquals(2010, EgovDateUtil.getCalcYearAsInt ("2009", "3", "20", 300, "day")); assertEquals(1, EgovDateUtil.getCalcMonthAsInt("2009", "3", "20", 300, "day")); assertEquals(14, EgovDateUtil.getCalcDayAsInt ("2009", "3", "20", 300, "day")); } 시작일자와 종료일자 및 두 시간 사이의 일자/밀리초 수를 계산한다. == Sample Source == @Test public void testDayCount() throws Exception { assertEquals(90, EgovDateUtil.getDayCount("20090101", "20090401")); assertEquals(90, EgovDateUtil.getDayCountWithFormatter("20090101", "20090401", "yyyyMMdd")); assertEquals(182, EgovDateUtil.getDayCountWithFormatter("2008/12/01", "2009/06/01", "yyyy/MM/dd")); } @Test public void testTimeCount() throws Exception { assertEquals(86400000, EgovDateUtil.getTimeCount("20090401", "20090402")); assertEquals(60000, EgovDateUtil.getTimeCount("20090301000000", "20090301000100")); assertEquals(3600000, EgovDateUtil.getTimeCount("20090301000000", "20090301010000")); } === 현재일자 조회 기능 === 현재 일자를 조회한다. == Sample Source == @Test public void testCurrentDate() throws Exception { assertEquals(Calendar.getInstance().get(Calendar.YEAR), EgovDateUtil.getCurrentYearAsInt()); assertEquals(Calendar.getInstance().get(Calendar.MONTH) + 1, EgovDateUtil.getCurrentMonthAsInt()); assertEquals(Calendar.getInstance().get(Calendar.DAY_OF_MONTH), EgovDateUtil.getCurrentDayAsInt()); assertEquals(Calendar.getInstance().get(Calendar.HOUR_OF_DAY), EgovDateUtil.getCurrentHourAsInt()); assertEquals(Calendar.getInstance().get(Calendar.MINUTE), EgovDateUtil.getCurrentMinuteAsInt()); } === 요일 기능 === 입력 일자의 해당 요일을 조회한다. == Sample Source == @Test public void testGetDayOfWeek() throws Exception { assertEquals("일", EgovDateUtil.getDayOfWeekAsString("2009", "03", "22")); assertEquals("월", EgovDateUtil.getDayOfWeekAsString("2009", "03", "23")); assertEquals("화", EgovDateUtil.getDayOfWeekAsString("2009", "03", "24")); assertEquals("수", EgovDateUtil.getDayOfWeekAsString("2009", "03", "25")); assertEquals("목", EgovDateUtil.getDayOfWeekAsString("2009", "03", "26")); assertEquals("금", EgovDateUtil.getDayOfWeekAsString("2009", "03", "27")); assertEquals("토", EgovDateUtil.getDayOfWeekAsString("2009", "03", "28")); } 두 일자 사이에 해당 요일의 수를 조회한다. == Sample Source == @Test public void testGetDayOfWeek() throws Exception { assertEquals(5, EgovDateUtil.getDayOfWeekCount("20090301", "20090331", "일요일")); assertEquals(4, EgovDateUtil.getDayOfWeekCount("20090301", "20090331", "토요일")); assertEquals(22, EgovDateUtil.getDayOfWeekCount("20090101", "20090531", "일")); assertEquals(52, EgovDateUtil.getDayOfWeekCount("20090101", "20091231", "일")); assertEquals(52, EgovDateUtil.getDayOfWeekCount("20090101", "20091231", "금")); assertEquals(52, EgovDateUtil.getDayOfWeekCount("20090101", "20091231", "토")); } === 날짜 형식 체크 기능 === 해당 날짜의 형식이 적합성을 조회한다. == Sample Source == @Test public void testDateFormatCheck() throws Exception { // 형식이 틀린경우 ParseException 발생 Class exceptionClass = null; try { dateFormatCheck = EgovDateUtil.dateFormatCheck("20090300"); } catch (Exception e) { exceptionClass = (Class) e.getClass(); } finally { assertEquals(ParseException.class, exceptionClass); } } ==== 4. EgovObjectUtil Service ==== 클래스명으로 객체를 생성하며 객체는 파라미터가 없는 기본 생성자 또는 파라미터가 존재하는 생성자 등 다양한 형태로 객체를 인스턴스화 할 수 있다. === Instantiate 기능 === 파라미터가 없는 기본 생성자로 객체를 인스턴스화 한다. == Sample Source == @Test public void testInstantiate() throws Exception { String className = "java.lang.String"; Object object = EgovObjectUtil.instantiate(className); String string = (String) object; string = "eGovFramework"; assertEquals("Framework", string.substring(4)); } === Instantiate 기능 - 생성자의 파라미터 포함=== 파라미터가 존재하는 형태의 생성자로 객체를 인스턴스화 한다. == Sample Source == @Test public void testInstantiateParamConstructor() throws Exception { String className = "java.lang.StringBuffer"; String[] types = new String[]{"java.lang.String"}; Object[] values = new Object[]{"전자정부 공통서비스"}; StringBuffer sb = (StringBuffer)EgovObjectUtil.instantiate(className, types, values); sb.append(" 및 개발프레임워크 구축 사업"); assertEquals("전자정부 공통서비스 및 개발프레임워크 구축 사업", sb.toString()); } ===== N. 참고자료 ===== * [[http://jakarta.apache.org/regexp/|Jakarta Regexp]]