본문 바로가기
JAVA

[JAVA] String _ API

by 주옹스 2020. 8. 6.

## String_API

 

 

    [ 특징 ]

      JAVA String은 같은주소에 다른String으로 변환이 안됨

 

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
package ex0805;
 
public class API_String {
    public static void main(String[] args) {
        
        // 자바에서는 문자열도 객체이다.
        // 문자열 비교는 == 절대쓰지말것!!! -> 주소비교하기 때문!!!
        
        // 같은 문자열을 입력받으면 같은 주소를 할당받음!! -> 자바가 할당할때 문자열이 같은지 확인하고 문자열이 같으면 
        //                                     같은 주소 할당, 문자열이 다르면 다른 주소 할당.
        
            String s1 = "seoul"//s1에는 주소가 저장 -> 오버라이딩으로 문자열출력하게 재정의
            String s2 = "seoul"//메모리할당을 한번만함 -> s1,s2 같은 주소 공유
            
            String s3 = new String("seoul"); //new만나서 객체 생성 -> 주소가 바뀜
            
            System.out.println(s1+":"+s2+":"+s3);
            
            //문자열에서의 == : 주소 비교
            System.out.println(s1==s2); //true
            System.out.println(s1==s3); //false
            
            //String에서의 equals() : 값을 비교 --> 오버라이딩 
            //Object의 equals()와 다름!
            System.out.println(s1.equals(s2)); //true
            System.out.println(s1.equals(s3)); //true
            
            System.out.println(s1.hashCode()); //109324212
            System.out.println(s2.hashCode()); //109324212
            System.out.println(s3.hashCode()); //109324212
            
            
            
            
            
            //<<불변의 법칙! 절대로 스트링의 값을 바꿀 수 없음>>
            
            s1+="Korea"// 절대로 이 연산을 여러번 반복하면 안됨!
                         // 기존의 s1: seoul 주소를 가진 문자열이 변하는게 아니라
                         // 다른 문자가 추가되면 다시영역의 메모리를 할당받아서 주소가 변함!
                         // 기존 주소의 문자열을 바꿀 수 없다!!!!
            
            System.out.println(s1); //seoulKorea
            System.out.println(s2); //seoul
            System.out.println(s1==s2); //false
            
            
    }
}
 
cs

   

 

 

 

[ 여러 String API ]

 

String s = "seoul korea";

 

 # s.substring(int a, int b)

    : a번째 인덱스에서 b-1까지의 문자열을 추출

    -> 이 때, a>b 런타임오류 발생.

 

 

# s.charAt(int n) 

   : n번째 인덱스에 있는 한 문자를 출력

 

 

# s.equals(String a) 

   : string a와 s의 값을 비교해서 true, false 반환

     ** 주의!  equals()는 string에서만 값을 비교, 다른 클래스에서는 주소를 비교한다!

 

 

 

# ==

   : 문자열에서 주소를 비교해준다.

 

 

 

# s.equalsIgnoreCase(String a)

   : 대문자와 소문자를 구분하지 않고 문자열을 비교해 true, false 반환

 

 

 

 

# s.startWith(String a) 

  : String s의 앞의 문자열만 String a와 비교하여 true, false 반환

    --> 0번째 인덱스부터 비교

 

 

 

# s.endsWith(String a)

  : String s의 뒤의 문자열만 String a와 비교하여 true, false 반환

   --> 마지막 인덱스부터 비교

 

 

 

# s.compareTo(String a)

  : 달라지는 부분의 아스키코드 값의 차이를 반환 

  ex)  s = "seoul korea"  , a = "seoul ccatstststs" --> k(107) - c(99) =  8

 

 

# s.indexOf(String a)

   : String s에 String a값이 있으면 해당 인덱스의 처음 값 반환, 찾는 문자열이 없으면 -1 반환

    ** a가 s에 여러 개가장 처음 값 리턴

 

 

 

# s.indexOf(String a, int n)

   : String s의 n번 인덱스 값부터 String a값이 있으면 해당 인덱스의 처음 값 반환, 찾는 문자열이

    없으면 -1 반환

 

 

  

 

# s.replace(string a, string b)

  : String s 에서 a문자열을 b문자열로 변환 

   ** 정규식 사용 불가

 

 

 

 

# s.replaceAll(string a, string b)

  : String s 에서 a문자열을 b문자열로 변환 

   ** 정규식 사용 가능 

       -> ex) s1 = s.replaceAll("\\d|\\s", "");  정규식에서 숫자 : \\d, or : | , 엔터와 탭을 포함한 공백 : \\s

       -> ex) s1 = s.replaceAll("[가-힣]", "");  대괄호하고 가~힣까지 : s1에서 한글을 ""로 변환

 

 

 

 

# s.trim()

   : 가장 왼쪽과 가장 오른쪽의 공백 제거

    -> ex) s = "    사  랑  ";  => System.out.println(":"+s.trim()+":"); => "사  랑" 

 

 

 

 

# s.format("%d" , int a)

  -> ex) a =123456;  => s = String.format("%,d",a);  => 123,456

 

 

 

# s.getBytes()

   : 해당되는 문자의 아스키값을 배열로 반환

  -> ex) s = "ABC"  => byte[] bb = s.getBytes();  => 65 66 67

 

 

 

# s.toUpperCase();

  : 문자열 s에서 소문자를 대문자로 변환

 

 

 

# s.toLowerCase();

  : 문자열 s에서 대문자를 소문자로 변환

 

 

 


 

## StringBuffer

 

StringBuffer sb3 = new StringBuffer();

 

# sb3.capacity()

  : 버퍼의 크기를 출력

 

 

 

# sb3.append(String a)

  : String sb3에 문자열 a 삽입

 

 

 

# sb3.insert(int a, String n)

: sb3 문자열의 a번째에 문자열 n 삽입

 

 

 

 

# sb3.delete(int a, int b)

  : sb3 문자열의 a번째 인덱스 부터 b개 삭제

 

 

 

 

# sb3.length()

   : stringBuffer의 길이 출력

 

 

 

 

# sb3.trimToSize()

   : 버퍼의 크기를 문자열 길이 만큼 줄이기

 

 

 

EX) StringBuffer sb3 = new StringBuffer("123456789")

sb3.delete(0,2).replace(1,2,"xy").delete(4,6) => 3xy589

    

'JAVA' 카테고리의 다른 글

[JAVA] 생성자  (4) 2020.08.11
[JAVA]인터페이스 (Interface)  (1) 2020.08.11
[JAVA] 비정형인자  (0) 2020.08.04
[JAVA] 재귀 호출  (0) 2020.08.04
[JAVA] 메소드  (0) 2020.08.03