우당탕탕 개발 블로그 도전기

[Java] collection framework의 특정한 문자열을 key로 지정하기 본문

Java

[Java] collection framework의 특정한 문자열을 key로 지정하기

나루나른 2024. 3. 26. 17:23

문제) HashSet 객체의 command 변수에 할당된 문자열에서 '=' 문자를 기준으로 문자열을 분리하여 앞의 문자열은 key, 뒤의 문자열은 value로 지정하라. 

각각의 key, value 값은 HashMap 객체의 hm 변수에 저장한다.

(HashMap 객체는 기본적으로 key와 value를 한 쌍으로 해서 데이터를 저장하는 컬렉션이다.)

 

1. 자바의 split() 메서드를 이용해서 나누는 방법

import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Properties;
import java.util.Set;

public class Test02_SetMap {
	
	public static void main(String[] args) {
    	
        //HaseSet 객체의 변수 command를 선언, HashSet 기본적으로 중복값을 허용하지 않는다.
    	HashSet command = new HashSet(); 
        
        //command 변수에 add를 이용해 문자열 데이터를 추가
        command.add("list.do=net.bbs.List");// 첫번째 데이터
		command.add("read.do=net.bbs.read");// 두번째 데이터
		command.add("write.do=net.bbs.Write");//세번째 데이터
		
        //HashMap 객체의 변수 hm을 생성, HashMap의 경우 key와 value를 한 쌍으로 데이터를 저장하는 컬렉션이다.
		HashMap hm = new HashMap();
        
        
        //HaseSet 객체의 요소를 가르키는 cursor를 생성
        //iterator를 가져와서 command HashSet의 값을 iter 변수에 할당함
        Iterator iter = command.iterator();
    		//iterator의 다음 요소가 있을 때까지 while루프를 반복
            while(iter.hasNext()) {
            //iterator의 요소를 String cmd에 변수에 할당함
            String cmd = (String) iter.next();
    		
            //split을 이용해서 '='를 기준으로 key와 value를 나눈다
            String[] parts = cmd.split("=");
            //나뉜 key와 value의 값을 각각 parts[] 배열의 [0]인덱스, [1]인덱스에 집어넣음.
            hm.put(parts[0], parts[1]);
            
            //결과적으로 '='문자를 기준으로 나뉜 "read.do"를 key로 호출시 "net.bbs.read"가 출력
            System.out.println(hm.get("read.do"));
            
            
        	}
    	}
    }

 

 

2. substring()을 이용한 방법

import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Properties;
import java.util.Set;

public class Test02_SetMap {

public static void main(String[] args) {
    
HashSet command = new HashSet(); 
command.add("list.do=net.bbs.List"); 
command.add("read.do=net.bbs.read");
command.add("write.do=net.bbs.Write");

HashMap hm = new HashMap();

Iterator iter = command.iterator();
while(iter.hasNext()) {
String cmd = (String) iter2.next(); //20행 까지는 이전의 코드와 동일

//'=' 문자를 기준으로 문자열을 분리하기 때문에 해당하는 '='의 위치부터 찾음
//그리고 해당하는 '=' 인덱스 값을 변수 index에 저장함.
int index = cmd.indexOf("=");
//문자열의 시작인 [0]인덱스 부터 '='전까지의 인덱스값을 String 변수 key에 저장
String key = cmd.tosubstring(0,index);
//'='이후의 인덱스부터 나머지의 문자열을 전부 value의 값으로 저장한다.
String value = cmd.tosubstring(indx+1);

//저장된 각각의 key값과 value의 값을 hm변수에 저장함.
hm.put(key, value);
    }
  
  //이전 코드와 같은 결과값인 "net.bbs.read"가 출력
  System.out.println(hm.get("read.do"));
  
    
    	}
}

 

 

3) 번외.. generic을 이용한 문제 풀이

import java.util.HashMap;
import java.util.HashSet;

public class Test02_SetMap {

public static void main(String[] args) {
    
HashSet command = new HashSet();
/* 
command.add("list.do=net.bbs.List"); 
command.add("read.do=net.bbs.read");
command.add("write.do=net.bbs.Write");
*/
 //각각의 저장할 문자열들을 배열에 지정한다.
 String[] commands2 = {
		"list.do=net.bbs.List",
		"read.do=net.bbs.read",
		"write.do=net.bbs.Write"
};
//새로운 HashMap객체를 생성하는데 <>연산자를 이용해 타입추론이 가능한 추론형으로 생성한다.
//'<>' 연산자를 이용해 변수선언에서 제공된 타입 매개변수(String,String)을 참조하여 new 키워드 뒤의 생성자 호출에서
//타입 매개변수를 자동으로 추론한다. 결과적으로 변수 'hm'은 문자열 키값과 값을 갖는 HashMap 객체를 참조함.
HashMap<String, String> hm = new HashMap<>();//new HashMap()에는 String 문자열 값만 올 수 있다.

//문자열 cmd는 commands2라는 배열의 값을 가진다.
for(String cmd : commands2) {

//'=' 문자를 기준으로 문자열을 분리함
int index = cmd.indexOf("="); //해당하는 '='의 위치를 찾는다.
String key = cmd.substring(0,index);//문자열의 시작 인덱스[0] 문자 '=' 전까지의 값을 key로 지정함
String value = cmd.substring(index+1);//'=' 문자의 이후부터 남은 인덱스의 문자열 전체를 value로 지정한다.

hm.put(key,value);//추출한 각각의 key와 value의 값을 HashMap에 저장한다.

System.out.println(hm.get("read.do")); 

    }
    
    }

 

자바 콘솔창에서의 출력값