///////
Search

인코딩, 파싱과 tdd

인코딩(Encoding) 설정, 한글깨짐

한글 깨짐 해결을 위한 방법
IntelliJ VM Encoding설정
Tomcat Encoding 설정
IntelliJ Editor File Encoding 설정
.csv 파일 이름 숫자로 변경
.csv파일을 UTF-8 인코딩 파일로 저장

파싱하기

파싱이란?

데이터를 분해 및 분석하여 원하는 형태로 조립하고 다시 빼내는 프로그램을 말한다.
주어진 데이터 자료 형식
\"A1120837\",\"서울특별시 금천구 벚꽃로 286 삼성리더스타워 111~114호 (가산동)\",\"C\",\"의원\",\"G099\"
class HospitalParser - 데이터를 원하는 형태(Hospital 객체)로 가공하기
1.
str = str.replaceAll("\"", ""); —> \” 을 없앤다.
2.
String[] splitted = str.split(","); —> ,단위로 나누어서 배열에 넣는다
3.
distrcit는 “서울특별시 강남구” 처럼 만들기 위해 address를 받아와서 정의해준다.
4.
subdivision은 name에 포함되어 있기에 name을 받아와서 파싱해준다.
{0: id, 1: address, 2: category, 6: emergencyRoom, 10: name}
public class HospitalParser implements Parser<Hospital> { @Override public Hospital parse(String str) { str = str.replaceAll("\"", ""); String[] splitted = str.split(","); String[] districtArr = splitted[1].split(" "); String district = districtArr[0] + " " + districtArr[1]; final String[] SUBDIVISION_LIST = {"내과", "치과", "피부과", "성형외과", "외과", "소아과", "가정의학과", "의원"}; String subdivision = splitted[10]; for (String divison : SUBDIVISION_LIST) { if (subdivision.contains(divison)) { subdivision = divison; break; } } return new Hospital(splitted[0], splitted[1], splitted[2], Integer.parseInt(splitted[6]), splitted[10], subdivision); } }
Java
복사

테스트 케이스 만들기

HospitalParser 클래스 이름에 마우스 커서를 두고 난 후,
window —> ctrl + shift + t
mac —> cmd + opt + t
자바 소스의 폴더와 같은 위치를 자동으로 만들어준다.

HospitalParserTest - parser 테스트 용도

class HospitalParserTest { String line1 = "\"A1120837\",\"서울특별시 금천구 벚꽃로 286 삼성리더스타워 111~114호 (가산동)\",\"C\",\"의원\",\"G099\",\"응급의료기관 이외\",\"2\",\"외과: 상시진료 내과는 당분간 휴진\",\"서울시 송파구 문정동 장지동 법조단지 위례 가락동 가락시장역 위치 삼성서울병원 외래교수 출신 구강외과 전문의 진료 진료과목 - 임플란트 치조골 뼈이식 수술 매복 사랑니 발치 턱관절 악관절 질환의 치료 교정 치료 및 기타 보존 보철(크라운 브릿지 인레이) 신경치료\",\"방이역 1번출구 바로옆 굿모닝 신한증권 뒷건물\",\"가산기대찬의원\",\"02-6267-2580\",\"02-920-5374\",\"1930\",\"1930\",\"1930\",\"1930\",\"1930\",\"1500\",\"1500\",\"1500\",\"0900\",\"0900\",\"0900\",\"0900\",\"0900\",\"0900\",\"1000\",\"1000\",\"085\",\"11\",\"126.88412249700781\",\"37.4803938036867\",\"2022-04-07 14:55:00.0\""; @Test @DisplayName("파싱이 잘 되는지") void parsing() { HospitalParser hospitalParser = new HospitalParser(); Hospital hospital = hospitalParser.parse(line1); // id 확인 String address = "서울특별시 금천구 벚꽃로 286 삼성리더스타워 111~114호 (가산동)"; assertEquals("A1120837", hospital.getId()); // address 확인 assertEquals("서울특별시 금천구 벚꽃로 286 삼성리더스타워 111~114호 (가산동)", hospital.getAddress()); // distract 확인 assertEquals("서울특별시 금천구", hospital.getDistrict()); // emergencyRoom assertEquals(2, hospital.getEmergencyRoom()); // category assertEquals("C", hospital.getCategory()); // name assertEquals("가산기대찬의원", hospital.getName()); // subdivison assertEquals("의원", hospital.getSubdivision()); } }
Java
복사
위와 같이 만드는데, 계속 사용하기 위해 메서드로 만들어 둔다.
class HospitalParserTest { private void assertHospital(Hospital hospital, String eId, String eAddress, String eDistrict, String eCategory, Integer eEmergencyRoom, String eName, String eSubdivision) { Assertions.assertEquals(eId, hospital.getId()); //주소가 잘 파싱 되는지 테스트 추가 Assertions.assertEquals(eAddress, hospital.getAddress()); //District Assertions.assertEquals(eDistrict, hospital.getDistrict()); //Category Assertions.assertEquals(eCategory, hospital.getCategory()); //Emergency Room Assertions.assertEquals(eEmergencyRoom, hospital.getEmergencyRoom()); //Name Assertions.assertEquals(eName, hospital.getName()); //Subdivision Assertions.assertEquals(eSubdivision, hospital.getSubdivision()); @Test @DisplayName("파싱 잘 되는가") void assertHospitalParse() { String line1 = "\"A1120837\",\"서울특별시 금천구 벚꽃로 286 삼성리더스타워 111~114호 (가산동)\",\"C\",\"의원\",\"G099\",\"응급의료기관 이외\",\"2\",\"외과: 상시진료 내과는 당분간 휴진\",\"서울시 송파구 문정동 장지동 법조단지 위례 가락동 가락시장역 위치 삼성서울병원 외래교수 출신 구강외과 전문의 진료 진료과목 - 임플란트 치조골 뼈이식 수술 매복 사랑니 발치 턱관절 악관절 질환의 치료 교정 치료 및 기타 보존 보철(크라운 브릿지 인레이) 신경치료\",\"방이역 1번출구 바로옆 굿모닝 신한증권 뒷건물\",\"가산기대찬의원\",\"02-6267-2580\",\"02-920-5374\",\"1930\",\"1930\",\"1930\",\"1930\",\"1930\",\"1500\",\"1500\",\"1500\",\"0900\",\"0900\",\"0900\",\"0900\",\"0900\",\"0900\",\"1000\",\"1000\",\"085\",\"11\",\"126.88412249700781\",\"37.4803938036867\",\"2022-04-07 14:55:00.0\""; HospitalParser hospitalParser = new HospitalParser(); Hospital hospital = hospitalParser.parse(line1); assertHospital(hospital, "A1120837", "서울특별시 금천구 벚꽃로 286 삼성리더스타워 111~114호 (가산동)", "서울특별시 금천구", "C", 2, "가산기대찬의원", "의원"); } }
Java
복사