-
StringTokenizer를 이용한 문자열 파라미터 변환JAVA 2023. 3. 15. 16:48
하나의 문자열에 저장된 외부 파라미터 항목들을 String:ArrayList 형식의 Map으로 변환하는 메소드
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556//하나의 문자열에 저장된 외부 파라미터 항목들을 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에 저장된 데이터를 하나의 문자열에 나열하는 메소드
12345678910111213141516171819202122232425262728//String:ArrayList 형식의 Map에 저장된 데이터를 하나의 문자열에 나열하는 메소드public static String encodingToString(Map<String, ArrayList<String>> listMap, String delimParam, String delimKey, String delimVal) {//파라미터를 하나의 문자열에 나열하기 위한 StringBuilderStringBuilder 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(); //완성된 문자열을 리턴}실행 클래스
12345678910111213141516171819202122232425262728293031import 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
소스 파일
'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