인코딩(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
복사