자바 질문입니다. -.0
2014.04.21 16:40
고전 중입니다. 몇 시간 들여다 봐도 답을 못찾겠네요.
입력 출력
"영이", 20, 30, "경기도" "영이"; 20; 30; "경기도"
"영이, 김" 35, "서울" "영이, 김"; 35; "서울"
왼쪽으로 입력하면 오른쪽으로 나와야 되는데요,
첫번째 줄은 물론 문제가 안되는데
둘째 줄은 어떻게 해야 될지 모르겠네요.
delimiter 를 쓸 수도 없고,
정규표현식을 사용하려고 해도 생각보다 복잡하고
구문도 정확하게 모르겠구요.
코멘트 6
-
꼬소
04.21 17:03
-
호수가
04.21 17:24
흠, 아직 tokenizer 는 아직 못 배웠구요, String class 의 split 메소드나 정규식을 이용해서 풀어야 될 것 같아요. 근데... 모르겠어요 -.-
-
왕초보
04.22 08:03
꼬소님 답이 안되는 예외 하나가 두번째 줄에.. 코마가 하나 없네요. ㅠㅜ 그래서 코마랑 빈칸이 모두 delimiter가 되어야 하는데.. 그러면 "로 싸인 넘을 제대로 못 해주니까.. ㄷㄷㄷ
그래서 꼬소님의 두번째 답으로 가는데... 치환이 아니고 조금 더 똑똑한 짓을 해야 하게 생겼어요. ㄷㄷㄷ
-
꼬소
04.22 20:45
그래서 제 프로그램에 버그가....ㅋ
-
티쓰리유저
04.22 09:27
java에서 replace 메쏘드를 이용하면 안된 것인가요? 따옴표 안에 있는 쉼표는 가만 놔두어야 하고, 닫히는 따옴표 뒤에 나오는 컴마나 빈칸을 세미콜론으로 변환 시켜야 하는 것 같은데.
-
Text 데이터를 parsing할 때는, space 갯수 등 포맷이 정확하게 되어 있지 않을거라고 가정하시는게 좋습니다. 예를 들어
["aaa", "bbb"]
["aaa", "bbb"]
는 같은 것으로 인식을 해야 하죠. 그래서 바로 데이터를 치환하기보다는, 일단 자체적인 형식으로 한번 import하고, export를 해주는 것이 좋습니다. 위와 같은 형식에서 replace나 split같은 고정된 함수를 그대로 사용할 경우, ["가나다, 마바사", 아, 자 , 차 ] 같은 샘플에서 문제가 발생할 확률이 높습니다. Text 데이터를 정규표현식으로 정리하려고 하면, 향후 십중팔구 수많은 에러가 발생할 것입니다.
꼬소님의 두번째 방법을 참조하여, 가능한 ;로 분리될 각각의 요소들을 list 형식 (크기를 예측할 수 있고 메모리가 큰 문제가 아니라면 배열로 해도 됩니다.) 으로 읽어들이고, 만들어진 list를 다시 string 형태로 export하면 안전하게 될 겁니다. 물론 최소한 입력된 데이터 크기만큼의 메모리가 시스템에 남아있어야 하지만, 어차피 string을 치환하는 방식도 메모리를 많이 잡아먹고 속도도 아주 느리기 때문에 권장하지 않습니다. 그리고, 치환하는 방법도 입력된 메모리만큼의 크기는 사용할 확률이 높죠. 미친듯이 메모리 복사를 하는 방식을 선택하지 않는다면요.
ps : 제가 말씀드린 방식은 실제로 현장에서 사용될 상용코드을 작성할 떄의 방식이고, 학교 과제물 같은거라면 굳이 감안안해도 될 겁니다.
tokenizer로 ','를 비교하면서 ;을 찍어주면 되겠네요..
string 안에 있는 ','는 무시
tokenizer를 사용하기 싫으시면, 한자 한자 띄어서 비교 해보면 될 듯 하네요..
" 만나면 닫히기 전까지는 pass, ',' 만나면 ';' 치환..