hongpossible.tistory.com/entry/Java%EC%9D%98-%EB%AC%B8%EC%9E%90%EC%97%B4-%EB%B6%84%EB%A6%AC-StringTokenizer

 

Java의 문자열 분리 (StringTokenizer)

안녕들 하시죠 ! 이번시간에는 StringTokenizer를 이용한 문자열 분리에 대해 알아보겠습니다. StringTokenizer java.util 패키지에 속해 있으며, 하나의 문자열을 여러 개의 문자열로 분리하기 위해 사용한

hongpossible.tistory.com


예제1

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
//*
package ex03.apiUtil;
 
import java.util.StringTokenizer;
 
public class Ex02_StringTokenizer {
    
    public static void main(String[] args) {
        
//        StringTokenizer token = new StringTokenizer("abc def ghi"); //default는 공백을 토큰으로 사용
        StringTokenizer token = new StringTokenizer("abc/def/ghi""/"); //구분자 "/"
        
        while(token.hasMoreTokens()) { //요소가 있다면
            System.out.println(token.nextToken()); //요소를 꺼내 출력ㄴ
            
        }
    }
 
}
//*/
cs


예제2

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
//*
package ex03.apiUtil;
 
import java.util.StringTokenizer;
 
public class Ex02_StringTokenizer {
    
    public static void main(String[] args) {
        
        StringTokenizer token = new StringTokenizer("사과=10|초콜렛=3|샴페인=1""=|"true); //구분자 "="와 "|"
        
        while(token.hasMoreTokens()) { //요소가 있다면
            String str = token.nextToken();
            
            if(str.equals("=")) {
                System.out.print("\t");
            } else if(str.equals("|")) {
                System.out.print("\n");
            } else {
                System.out.println(str);
            }
            
        }//end while
    }
 
}
//*/
cs

  • Calendar c = Calendar.getInstance() =>System이 갖고 있는 날짜 얻어옴
  • c.get(Calendar.YEAR); =>System이 갖고 있는 연도를 가져옴 (.MONTH / .DATE / HOUR ...)
  • c1.after(c2) =>c1이 c2보다 뒤의 날인가
  • c1.before(c2) =>c1이 c2보다 앞의 날인가
  • c1.equals(c3) =>c1과 c2가 같은 날인가
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
package ex03.apiUtil;
//->java.util 패키지 안에 있는 ~
 
import java.util.*//util안에있는 모든걸 사용 가능 import 
 
public class Ex01_MainEntry {
    
    public static void main(String[] args) {
        
        Calendar c = Calendar.getInstance(); //System이 갖고 있는 날짜 얻어온다.
        System.out.print(c.get(Calendar.YEAR) + "년 ");
        System.out.print((c.get(Calendar.MONTH) + 1+ "월 "); //월은 0부터 시작 -> +1필수 
        System.out.print(c.get(Calendar.DATE) + "일 ");
        System.out.println(c.get(Calendar.HOUR) + "시");
        
        System.out.println("\n=============================");
        
 
        Date date = new Date();
        int h = date.getHours(); //잘 사용되지 않고 앞으로는 사라지게될 메소드
        int m = date.getMinutes();
        int s = date.getSeconds();
        System.out.println("현재시간은 " + h + ":" + m + ":" + s);
        
        Calendar c1 = Calendar.getInstance();
        Calendar c2 = Calendar.getInstance();
        
        c2.set(2018122000);
//        c2.set(2021, 12, 20, 0, 0);
        
        if(c1.after(c2)) { //C1이 C2보다 앞의 날인가 뒤인가 
            System.out.println("현재 시간은 " + c2.get(Calendar .YEAR) + " 1월 1일 이후 입니다.");
        } else if(c1.before(c2)) {
            System.out.println("현재 시간은 2018년 1월 1일 이전 입니다.");
        } if(c1.equals(c2)) {
            System.out.println("현재 시간은 2018년 1월 1일 입니다.");
        }
 
        
    }
 
}
 
cs


cf)java.util 패키지관련 클래스

   -Random class

   -Scanner class

   -날짜관련,...

   -형식지정,...

   -StringTokenizer ....

 

 

  • append() =>문자열 추가
  • insert() =>문자열 삽입
  • replce() =>문자열 변경
  • setLength() =>길이값 조절
  • reverse() =>문자가 역으로 출력됨
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
package ex02.apiStringBuffer;
//->java.lang 패키지 안에 있는 StringBuffer 클래스에 들어있는 method(기능)들
//->thread 지원 
 
public class Ex02_StringBuffer {
    
    public static void main(String[] args) {
        
        StringBuffer sb = new StringBuffer("This");
        System.out.println(sb); //System.out.println(sb.toString());
        
        
        sb.append(" is pencil"); //문자열 추가 
        System.out.println(sb);
        
        
        sb.insert(7" my"); //문자열 삽입, 7번째에 my를 삽입 
        System.out.println(sb);
        
        
        sb.replace(810"your"); //문자열 변경, 8~10번째까지의 문자를 your로 변경
        System.out.println(sb);
        
        
        System.out.println(sb.length());
        sb.setLength(5); //길이값 조절, 길이를 5로 조절 -> 그부분의 문자 빼고는 안보이게됨(없어지진 않음)
        System.out.println(sb);
        System.out.println(sb.capacity()); //length가 줄어도 capacity는 그대로
        
        sb.setLength(20); //다시 글자 길이만큼 늘렸어도 내용이 지워진다
        System.out.println(sb);
        
        
        System.out.println(sb.reverse()); //문자가 역으로 출력됨 
    }
 
}
 
cs

(출처)

www.tcpschool.com/java/java_api_stringBuffer

 

코딩교육 티씨피스쿨

4차산업혁명, 코딩교육, 소프트웨어교육, 코딩기초, SW코딩, 기초코딩부터 자바 파이썬 등

tcpschool.com

첫번 째 예제의 경우 StringBuffer 객체는 단 한번만 생성된다. 두번 째 예제는 String 자료형에 + 연산이 있을 때마다 새로운 String 객체가 생성된다(문자열 간 + 연산이 있는 경우 자바는 자동으로 새로운 String 객체를 만들어 낸다). 두번 째 예제에서는 총 4개의 String 자료형 객체가 만들어지게 된다.

String 자료형은 한번 값이 생성되면 그 값을 변경할 수가 없다. 이렇게 값을 변경할 수 없는 것을 immutable 하다고 한다. trim, toUpperCase 등의 메소드를 보면 문자열이 변경되는 것 처럼 생각 될 수도 있겠지만 해당 메소드 수행 시 또 다른 String 객체를 생성하여 리턴할 뿐이다. StringBuffer 는 이와 반대로 값을 변경할 수 있다(mutable 하다). 즉 한번 생성된 값을 언제든지 수정할 수 있다.

그렇다면 무조건 StringBuffer를 사용하는 것이 좋을까?
그건 상황에 따라 다르다. StringBuffer 자료형은 String 자료형보다 무거운 편에 속한다. new StringBuffer() 로 객체를 생성하는 것은 일반 String을 사용하는 것보다 메모리 사용량도 많고 속도도 느리다. 따라서 문자열 추가나 변경등의 작업이 많을 경우에는 StringBuffer를, 문자열 변경 작업이 거의 없는 경우에는 그냥 String을 사용하는 것이 유리하다.

wikidocs.net/276
 

위키독스

온라인 책을 제작 공유하는 플랫폼 서비스

wikidocs.net


  • capacity()는 default size값이 존재 -> 16
  • null값은 문자열안에 글자가 들어가야 문자의 끝에 들어간다.
  • StringBuffer타입 sb의 주소값은 변경전과 변경후가 같다.(데이터를 변경해도 주소값 변경X)
  • trimToSize()->용량크기 조정(자기가 가지고 있는 메로리용량과 default capacity의 값이 같아짐,메모리 낭비 초래 x
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
package ex02.apiStringBuffer;
//->java.lang 패키지 안에 있는 StringBuffer 클래스에 들어있는 method(기능)들
//->thread 지원 
 
public class Ex01_StringBuffer {
    
    public static void main(String[] args) {
        
        StringBuffer sb = new StringBuffer();
        
        System.out.println(sb.hashCode());
        
        System.out.println("lenght  /  capacity");//길이와 용량
        int len = sb.length();
        int size = sb.capacity(); //default size값이 존재,an initial capacity of 16 characters
        System.out.println(len + "    /    " + size);
        
        sb.append("hihihi");
        System.out.println("lenght  /  capacity");//길이와 용량
        len = sb.length();
        size = sb.capacity(); //default size값이 존재,an initial capacity of 16 characters
        System.out.println(len + "    /    " + size);
                
        sb.append("12345 67890");
        System.out.println("lenght  /  capacity");//길이와 용량
        len = sb.length();
        size = sb.capacity(); //default size값이 존재,an initial capacity of 16 characters
        System.out.println(len + "    /    " + size);
        //default size(16) * 2 + 2(마지막null값) = 34 
        //cf)null값은 문자열안에 글자가 들어가야 문자의 끝에 들어간다(\0 이 null의미)
        
        sb.append("sidjfiehgoaidjf 234456");
        System.out.println("lenght  /  capacity");//길이와 용량
        len = sb.length();
        size = sb.capacity(); //default size값이 존재,an initial capacity of 16 characters
        System.out.println(len + "    /    " + size);
        //34 * 2 + 2(null문자-char타입-2byte) = 70
        
        System.out.println(sb.hashCode());
        //처음 sb의 주소값과 이후 변경했던 주소값이 같다(sb의 데이터를 변경해도 주소값 변경x)
        
        
        sb.trimToSize(); //용량 크기 조정(자기가 가지고 있는 메로리용량과 default capacity의 값이 같아짐, 메모리 낭비 초래 x
        len = sb.length();
        size = sb.capacity(); //default size값이 존재,an initial capacity of 16 characters
        System.out.println(len + "    /    " + size);
        
    }
 
}
 
cs

www.tcpschool.com/java/java_api_object

 

코딩교육 티씨피스쿨

4차산업혁명, 코딩교육, 소프트웨어교육, 코딩기초, SW코딩, 기초코딩부터 자바 파이썬 등

tcpschool.com


  • getClass()
  • hashCode() 메모리상의 주소를 10진수로 표현
  • toString()
  • 16진수 <-> 10진수 변환
  • Integer.toHexString()
  • new를 사용하지 않으면, heap영역에 메모리가 잡히지 않는다
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
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
package ex05.apiObject;
//->java.lang 패키지 안에 있는 Object 클래스에 들어있는 method(기능)들
 
class Point extends Object{
    
    int x,y;
 
//    @Override
//    public String toString() {
//        return "Point [x=" + x + ", y=" + y + "]";
//    } -> Override를 하면, Object String값이 Override한 클래스의 결과값으로 나오게 됨 
    
}
 
public class Ex01_ObjectClass {
    public static void main(String[] args) {
        Point pt = new Point();
        System.out.println("<<<Point pt Information>>>");
        System.out.println("class name: " + pt.getClass());
        System.out.println("hash code: " + pt.hashCode()); //366712642 (10진수)
        System.out.println("Object String: " + pt.toString()); //15db9742 (16진수)
        System.out.println("Object String: " + pt);
        
        System.out.println("\n<366712642와 15db9742이 같은지 확인>");
        System.out.printf("16진수 -> 10진수: 0x15db9742 -> %d\n"0x15db9742); //0x + 숫자 = 16진수표현법
        
        System.out.printf("10진수 -> 16진수: 366712642 -> %x(소문자ver) \t %X(대문자ver) \n"366712642366712642); 
 
        
        
        System.out.println("\n\n=================");
        
        
        
        Point pt2 = new Point();
        System.out.println("<<<Point pt2 Information>>>");
        System.out.println("class name: " + pt2.getClass());
        System.out.println("hash code: " + pt2.hashCode()); //2101973421 -> 객체 p1과 p2의 주소 다름 
        System.out.println("Object String: " + pt2.toString()); //7d4991ad
        System.out.println("Object String: " + pt2);
        
        
        System.out.println("\n\n----------------------");
        //ex05.apiObject.Point@7d4991ad -> toString()의 의미?
        System.out.println("<pt2.toString() : toString()의 의미??>");
        System.out.println(pt2.getClass().getName() + '@' + Integer.toHexString(pt2.hashCode()));
                        //ex05.apiObject.Point + @ + 7d4991ad 
        
    
        
        //서로다른 객체의 주소 비교 
        Point pt3 = new Point();
        if (pt.hashCode() == pt3.hashCode()) {
            System.out.println("같다");
        } else {
             System.out.println("다르다"); //
        }
        
        Point pt4; //new를 사용하지 않으면, heap영역에 메모리가 잡히지 X
        pt4 = pt;
        if (pt.hashCode() == pt4.hashCode()) {
            System.out.println("같다");
        } else {
             System.out.println("다르다"); //
        }
        
        System.out.println("pt: " + pt.hashCode()); //메모리상의 주소를 10진수로 표현-hashCode()
        System.out.println("pt4: " + pt4.hashCode());
        
        
//        java.util.Scanner sc = new java.util.Scanner(System.in);
        //java.util안에있다는 걸 여기서 명시해주면 따로 import하지 않아도됨
        
        
    }
}
 
cs


cf) 표현하는 진법이 다를 뿐 아래의 두 부분은 같다

 

+ Recent posts