ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • StringTokenizer를 이용한 문자열 파라미터 변환
    JAVA 2023. 3. 15. 16:48

    하나의 문자열에 저장된 외부 파라미터 항목들을 String:ArrayList 형식의 Map으로 변환하는 메소드

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    //하나의 문자열에 저장된 외부 파라미터 항목들을 String:ArrayList 형식의 Map으로 변환하는 메소드
    public static Map<String, ArrayList<String>> stringToListMap(String data, String delimParam, String delimKey, String delimVal) {
        
        Map<String, ArrayList<String>> map = new HashMap<String, ArrayList<String>>();
        ArrayList<String> list1 = new ArrayList<String>(); 
        
        StringTokenizer st1 = new StringTokenizer(data, delimParam);    //문자열에서 파라미터를 항목 별로 1차 분리 
        
        //분리한 파라미터를 임시로 리스트에 저장
        while(st1.hasMoreTokens()) {
            list1.add(st1.nextToken());
        }
        
        System.out.println("========================== 1차 분리 ==========================");
        for(String item : list1) {
            System.out.println(item);
        }
        System.out.println("==============================================================");
        System.out.println();
        
        
        System.out.println("========================== 2차 분리 ==========================");
        //분리한 항목들을 키와 값으로 분리하여 map에 저장
        for(String item : list1) {
            
            StringTokenizer st2 = new StringTokenizer(item, delimKey);    //분리한 항목들을 키와 값 구분자로 2차 분리 
            
            String key = st2.nextToken();            //1차 분리한 결과에서 첫 번째 토큰(파라미터 이름)을 저장
            String tokenSecond = st2.nextToken();    //1차 분리한 결과에서 두 번째 토큰(파라미터 값)을 저장
            
            System.out.println(key); 
            System.out.println(tokenSecond);
            System.out.println("--------------------------------------------------------------");
            
            StringTokenizer st3 = new StringTokenizer(tokenSecond, delimVal);    //파라미터 값을 value-value 구분자로 분리
            
            ArrayList<String> valueList = new ArrayList<String>();    //파라미터의 값을 저장하기 위한 리스트 선언
            
            
            //파라미터의 값을 리스트에 저장
            while(st3.hasMoreTokens()) {
                
                //1차 분리한 결과에서 두 번째 토큰을 value-value 구분자로 다시 분리하여 리스트에 저장
                String value = st3.nextToken();
                
                valueList.add(value);    //key-value 구분자 제거
            }
                        
            map.put(key, valueList);    //파라미터의 이름을 key로, 파라미터의 값 리스트를 value로 가지는 Map에 저장 
        }
        
        System.out.println("==============================================================");
        System.out.println();
        
        return map;
    }

     

     

    String:ArrayList 형식의 Map에 저장된 데이터를 하나의 문자열에 나열하는 메소드

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    //String:ArrayList 형식의 Map에 저장된 데이터를 하나의 문자열에 나열하는 메소드
    public static String encodingToString(Map<String, ArrayList<String>> listMap, String delimParam, String delimKey, String delimVal) {
        
        //파라미터를 하나의 문자열에 나열하기 위한 StringBuilder
        StringBuilder st = new StringBuilder() ;
        
        //Map의 키를 Set에 저장
        Set<String> keySet = listMap.keySet();
        
        //Set에 저장된 key를 이용해 각각의 key에 해당하는 값을 추출 
        for(String key : keySet) {
            ArrayList<String> list = listMap.get(key);    //입력 받은 Map에서 각 key에 해당하는 값(value)들을 리스트에 저장
            
            st.append(key).append(delimKey);    //StringBuilder에 key와 key-value 구분자 추가
            
            //리스트에 저장된 각각의 value를 분리하고 value-value 구분자 추가
            for(String item : list) {
                st.append(item);
                if(list.indexOf(item) < list.size() - 1) {
                    st.append(delimVal);
                }
            }
            
            st.append(delimParam);    //key-key 구분자 추가
        }
        
        return st.toString();    //완성된 문자열을 리턴
    }

     

     

     

    실행 클래스

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    import java.util.ArrayList;
    import java.util.Map;
    import java.util.Set;
     
    public class ParamListTest {
        public static void main(String[] args) {
        
            String data = "홍길동=1,2,3^^^김영희=4^^^김자바=5,6,7^^^";    //원본 데이터(순서 무관, 파라미터 항목 중복 불허)
            String delimParam = "^^^";    //파라미터 항목 간 구분자(key-key 구분자)
            String delimKey = "=";        //파라미터의 이름과 값 구분자(key-value 구분자)
            String delimVal = ",";        //파라미터의 값과 값 구분자(value-value 구분자)
            
            System.out.println("원본 데이터 : " + data);
            System.out.println();
            
            Map<String, ArrayList<String>> listMap = ParamList.stringToListMap(data, delimParam, delimKey, delimVal);
            Set<String> keySet = listMap.keySet();
            
            System.out.println("listMap : { ");
            for(String key : keySet) {
                System.out.println(key + " = " + listMap.get(key));
            }
            System.out.println("}");
            
            System.out.println();
            
            String str = ParamList.encodingToString(listMap, delimParam, delimKey, delimVal);
            System.out.println("paramList : " + str);
            
        }
    }

     

    실행 결과

     

    참고 사이트 : https://hianna.tistory.com/573

     

     

    소스 파일

    practice.zip
    0.00MB

    'JAVA' 카테고리의 다른 글

    스트림 요소 처리  (0) 2023.03.16
    스트림(Stream)  (0) 2023.03.16
    람다식(Lamda Expression)  (0) 2023.03.15
    문자열 관련 클래스  (0) 2023.03.14
    System 클래스  (0) 2023.03.13
Designed by Tistory.