java_logo.png    


안녕하세요.

 

유형석입니다.

 

이번에는 자바 프로그래밍 팁하나 알려 드리도록 하겠습니다.


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;


라고 합시다.


자 여기서 그냥 getListssaveLists 변수에 넣어 버리면 어떻게 될까요?


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


요래 나오게 될것 입니다.


오늘은 여기 까지!


짧은 글 읽어 주셔서 감사합니다!