강좌 & 팁
안녕하세요.
유형석입니다.
이번에는 자바 프로그래밍 팁하나 알려 드리도록 하겠습니다.
1. 상황
자바를 코드를 작성 하는 도중 Xml 파일을 읽어야 하는 상황이 생겨서 포럼의
[Java]JAXBContext로 xml을 오브젝트로, 오브젝트를 xml로 변환하기
를 참고 하여 열심히 읽고 있었습니다.
<?xml version="1.0" encoding="UTF-8"?> <a> <b> b-1, b-2 </b> </a>
Xml 파일이 위와 같은 형식으로 되어 있었습니다.
제가 원하는건 b-1과 b-2를 String[] 에 따로따로 넣어 주고 싶습니다.
구분자는 , 라고 정했습니다.
자 한번 해볼까요?
2. 방법
Xml을 읽어서 받아온 값이 있는 변수는
String getLists;
일단 값을 저장할 곳은
String[] saveLists;
라고 합시다.
자 여기서 그냥 getLists를 saveLists 변수에 넣어 버리면 어떻게 될까요?
Xml 상에서는 사용자는 보기 좋게 되어 있지만 저걸 그냥 변수에 저장해 버리면
불행히도 b-1과 b-2앞에 공백은 다 같이 들어 갑니다.
그리고 Xml 이기 때문에 탭문자로 들어가겠죠? 게다가 리턴 값도 들어 있을 겁니다.
getLists를 출력해보면 아래와 같이 들어가 있을겁니다.
(공백은 탭문자라고 생각해주세요! 보기 좋으라고 넣은게 아닙니다.orz)
b-1, b-2
3. split()
일단 문자열을 , 를 기준으로 나누도록 하겠습니다.
saveLists = getLists.split(",");
saveLists의 값을 출력해 보면 각각 아래와 같이 들어 있겠죠?
saveLists[0]
b-1
saveLists[1]
b-2자 일단 값을 나누긴 했는데 공백을 없애서 깔끔하게 넣어 주고 싶습니다.
그리고 공백을 없애지 않으면 추후 다른곳에서 사용할때 문제가 될 수 도 있기 때문에,
미리미리 방지 합시다.
4. replaceAll()
saveLists = getLists.replaceAll("[\\n\\t ]", "").split(",");
위와 같이 적어 주시면 한방에 해결!
그래도 왜 해결 되는지 알아 봐야 겠죠?
replaceAll() 함수는 스트링 변수에 있는 해당하는 모든 문자를 변경 해주는 역활을 합니다.
앞에있는 인자값이 변수내에서 바꿀 문자이고 뒤에 넣어주는 인자값이 그 바꿀 문자열을 대체할 문자입니다.
replaceAll("a","b") 라고 적으면 해당 변수내의 소문자 a는 전부 소문자 b로 변경 된다고 생각 하시면 됩니다~
자 그럼 맨 위의 내용을 변역해 봅시다.
\\n 은 리턴값을 나타내고 \\t 은 탭문자를 나타냅니다.
그리고 잘 안보일 수 있지만 \\n\\t 다음에 space 문자 하나 있다는거~ 잊지 말아 주세요~
아참 [] 로 묶어 주셔야 되는것도 잊으시면 안됩니다!
자 이제 차근차근 생각하면 String 변수 내의 모든 리턴값과 탭문자와 space 문자를 "" 로 변경하는 것이니
실질적으로는 해당 문자들을 전부 지운다는것과 마찬가지겠죠?
자 이제 saveLists의 값을 출력하면
saveLists[0]
b-1
saveLists[1]
b-2요래 나오게 될것 입니다.
오늘은 여기 까지!
짧은 글 읽어 주셔서 감사합니다!