ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • java :: 유용한 API, String, StringBuffere, StringTokenizer
    IT/Java & JSP & FW 2011. 12. 22. 12:50
    String
    String 클래스
    String 클래스는 다른 클래스와 다르게 New를 사용하지 않고도 객체를 저장할 수 있는 클래스이다.   

    형식

    String 변수명="문자열";

     
    예제-1
    (StringTest.java)
    public class StringTest {
    	public static void main(String[] args) {
    		
    		String str="java";
    		String str2="java";  //heep에 있는 데이터를 풀 스킨해서 같은 데이터가 있을 경우 같은 곳을 참조함(메모리의 효율성)
    		String str3=new String("java");  //정석대로 만듬 (새롭게 heep 열역에 생성)
    
    		if(str==str2){
    			System.out.println("str==str2:같다");
    		}else{
    			System.out.println("str==str2:같지않다");
    		}
    		
    		String res=str==str3?"같다":"같지않다";  //삼항연산자
    		System.out.println("str==str3:"+res);
    		
    		String res2=str.equals(str2)?"같다":"같지않다";
    		String res3=str.equals(str3)?"같다":"같지않다";
    		
    		System.out.println(res2);
    		System.out.println(res3);
    		
    		Object o=new Object();
    		Object o2=new Object();
    		Object o3=o;  //o에 o3주소값을 넣는다.
    		
    		String res4=o.equals(o2)?"갇다":"같지않다";  //obect equals는 등가연산 똑같이 주소값을 비교한다.
    		String res5=o.equals(o3)?"같다":"같지않다";
    		System.out.println(res4);
    		System.out.println(res5);
    	}
    }
    
    예제-2
    (Test.java)
    import java.io.*;
    
    public class Test {
    	public static void main(String[] args) 
    	throws IOException{
    		BufferedReader in=
    				new BufferedReader(new InputStreamReader(System.in));
    		
    		System.out.println("원하시는 동물을 선택하세요.");
    		
    		System.out.println("강아지, 고양이, 오리");
    		System.out.print("입력>");
    		String aml=in.readLine();
    		
    		System.out.println();
    		System.out.println(aml+"를 입력하셨습니다.");
    		
    		if(aml.equals("강아지")){  //aml은 String 클래스로 만들어졌고 레퍼런스 값이므로 "==" 으로 문자열과 비교할 수 없다.
    			System.out.println("강아지는 멍멍하고 웁니다.");
    			System.exit(0);
    		}else if(aml.equals("고양이")){
    			System.out.println("고양이는 야오하고 웁니다.");
    			System.exit(0);
    		}else if(aml.equals("오리")){
    			System.out.println("오리는 꽥꽥하고 웁니다.");
    			System.exit(0);
    		}else{
    			System.out.println("다시 선택해주십시오.");
    		}
    	
    	}
    }
    


    StringBuffer
    StringBuffer? String과 뭐가 달라?
    StringBuffer 클래스는 문자열조작에 좀 더 적합하게 만들어진 클래스 (StringBuffer가 Stirng보다 먼저 나왔음)
    String의 불변의 법칙을 보완하고, 문자열을 직접적으로 조작이 가능하다.

    반드시 new로 객체생성해야 함

    예제
    (StringTest2.java)
    public class StringTest2 {
    
    	public static void main(String[] args) {
    		
    		StringBuffer sb=new StringBuffer("Hellojava");  //StringBuffere 사용시 반드시 생성자 호출해야 함
    		
    		System.out.println("sb="+sb);
    		
    		sb.insert(5,"JSP");  //StringBuffere 은 String 과 다르게 문자열 조작이 가능하다.
    		System.out.println("sb="+sb);
    		sb.append("hi");
    		System.out.println("sb="+sb);
    		sb.delete(8, 12);
    		System.out.println("sb="+sb);
    		
    	}
    }
    


    StringTokenizer (열거형데이터=커서형)
    문자열로부터 토큰을 추출하는 기능의 클래스
    while문으로 문자열을 추출할 수 있다. (참,거짓 조건에 의해 반복하기 때문에.)

    형식

    Str=new StringTokenizer("사과,바위,귤",",")
    Str=new StringTokenizer("사과 바나나 귤")


    예제
    (StringTest3.java)
    import java.util.*;  //StringTokenizer 을 위해 임포트시킴
    public class StringTest3 {
    
    	public static void main(String[] args) {
    
    		String str="서태지,이지아,이주노,성시경";
    		StringTokenizer st=new StringTokenizer(str,",");  //두 번째 값으로 구분자를 넣어주면 알아서 토큰분리를 해줌
    		
    		while(st.hasMoreTokens()){  //뒤에 값이 있으면 참, 없으면 거짓
    			System.out.println(st.nextToken());
    		}
    		
    	}
    }
    


    Collection 과 Generic
    컬렉션(Collection)?
    데이터를 효율적으로 사용하기 위해 무한적으로 객체데이터를 저장하는 방식의 기술(단, 기본데이터는 기억시킬 수 없다.)

    컬렉션의 구조?
    자료구조인 배열, 리스트, 스택, 큐, 해시테이블을 컬랙션클래스로 완성해서 제공한다.

    누구로부터 온것?
    컬랙션클래스는 Collection 인터페이스로부터 구현되었기 때문에 해당 인터페이스의 주요 메소드를 이용할 수 있다.

    Vector (안정성은 뛰어나나 속도는 조금 느리다.)
    Object 데이터를 기억하며 원소가 가득차면 자동으로 저장영역을 늘려주는 가변길이의 배열이다. 
    타입이 다른 객체들도 모두 저장이 가능하다.

    그럼 제너릭이란
    컬렉션들은 기본적으로 객체를 저장할 때에 Object 타입으로 저장하기 때문에 다시 빼내올 때는 해당 타입으로 변환해주어야 하지만, 1.5버젼부터 제네릭이라는 기능이 생기면서 컬렉션에 해당하는 타입을 지정할 수 있게 되었다.

    예제
    (VectorTest.java)
    import java.util.*;
    public class VectorTest {
    	
    	public static void main(String[] args) {
    		
    		//백터는 데이터를 저장하기 위해 만든다.
    		Vector v=new Vector(5,3);  //초기값 5, 증가값 3
    		
    		System.out.println("백터의 공간크기"+v.capacity());  //capacity 는 vector의 크기를 부른다
    		System.out.println("백터의 데이터크기"+v.size());  //
    		
    		for(int i=1;i<10;i++){
    			//v.add(i);  레퍼런스 값(주소 값)만 저장이 된다. 그러므로 integer로 감싸준다.(JVM이 알아서 감싸줌 그래서 아래와 똑같이 됨) v1.5 이상부터
    			v.add(new Integer(i)); 
    			
    		}
    		
    		System.out.println("백터의 공간크기"+v.capacity()); 
    		System.out.println("백터의 데이터크기"+v.size()); 
    		
    		System.out.println(v.firstElement());
    		v.add(new Double(3.14));  //vector 데이터 추가 형식
    		v.add(1.23);
    		v.add("Hello");
    		Integer in=(Integer)v.firstElement();  //다운캐스팅을해서 값을 추출해온다.
    		System.out.println(in);
    		System.out.println("===================");
    		//vector에서 원하는 값 추출하기
    		for(int i=0;i<v.size();i++){
    			System.out.println(v.get(i));
    		}
    		System.out.println("===================");
    		Vector<string> v2=new Vector<string>();  //"<>"꺽가로를 이용해 Generic 지정, 자동으로 다운캐스팅이 된다.
    		v2.add("Hello");
    		v2.add("hi");
    		v2.add("java");
    		
    		for(int i=0;i<v2.size();i++){
    			String temp=v2.get(i);  //다운캐스팅이 필요하다.
    			System.out.println(temp);
    		}
    
    	}
    }
    

    Hashtable
    해시테이블은 인덱스가 아닌 key 값으로 원하는 테이블 항목을 검색하는 클래스이다.
    항목을 검색하기 때문에 검색속도가 빠르다.
    해시테이블은 key값과 value 값이 한 쌍이다. 

    예제
    (HashTest.java)
    import java.util.*;
    public class HashTest {
    
    	public static void main(String[] args) {
    		
    		Hashtable ht=new Hashtable();
    		
    		ht.put("하나", "One");  //해시테이블에서 값 삽입
    		ht.put("둘", "two");
    		ht.put("빨강", "Red");
    		ht.put("파랑", "blue");
    		
    		System.out.println("하나는 영어로??");
    		System.out.println(ht.get("하나"));  //해시테이블에서 값 추출
    		System.out.println("파랑은 영어로??");
    		System.out.println(ht.get("파랑"));
    	}
    }
Designed by Tistory.