본문으로 바로가기

자바 String 클래스 - contains, equals

category 코딩/Java 2016. 10. 20. 16:05






문자열 포함 유무 확인 : contains( )





contains( ) 메서드는 특정 문자열이 포함되어 있는지 확인하는 기능을 한다. 특정 문자열이 포함되어 있다면 true를 없다면 false를 반환한다.



1
2
3
4
5
6
7
8
9
10
11
public class StringTest
{
    public static void main(String args[])
    {
        String p = "I have a pen";
        
        System.out.println("apple 이 있는가 ? " + p.contains("apple"));
        System.out.println("pen 이 있는가 ? " + p.contains("pen"));
        
    }
}
cs


1
2
3
4
[실행결과]
 
apple 이 있는가 ? false
pen 이 있는가 ? true
cs



위의 코드에서는 apple과 pen이라는 문자열이 포함되어있는지 확인해 보았다. apple의 경우 없으므로 false를 반환하고, pen의 경우 있으므로 true를 반환한다.




문자열 비교 : equals( )





두 문자열이 같은가라고 비교를 하기 위해서는 equals( ) 메서드를 이용하면 된다. 문자열 비교를 위해 == 를 사용해도 되는 게 아닌가 싶지만 꼭 equals( )를 사용해야 하는 이유가 있다. 


equals( ) 메서드는 두 객체가 같은지 비교를 하는 기능을 하는데, String은 엄밀히 객체이므로 정확한 비교를 위해서는 객체를 비교할 수 있는 equals( )를 사용해야 하는 것이다.


equals( )의 사용법과 equals( )를 사용해야 하는 이유는 예제로 확인해 보자.



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
public class StringTest
{
    public static void main(String args[])
    {
        String a1 = "pen";
        String a2 = "apple";
        String a3 = "pen";
        String a4 = "PEN";
        
        // a1과 다른 문자를 비교해 보자.
        System.out.println("a1 과 a2 : "+a1.equals(a2));
        System.out.println("a1 과 a3 : "+a1.equals(a3));
        System.out.println("a1 과 a4 : "+a1.equals(a4));
    }
}
cs


1
2
3
4
5
[실행결과]
 
a1 과 a2 : false
a1 과 a3 : true
a1 과 a4 : false
cs



먼저 equals( )의 사용에 대해 알아보자. 문자열(혹은 문자열을 담은 변수).equals(비교할 문자열)로 사용한다.  a1.equals(a4) 혹은 "pen".equals("PEN") 사용하면 된다.


위의 예제에서 비교 결과를 확인해 보자. a2와 비교하였을 경우 다른 문자열이므로 false가 나온다. a3와 비교시에는 같은 문자이므로 true가 방환된다. 그리고 equals( )는 대소문자를 구별하므로 a4와 비교시에는 false로 나타난다. 만약 대소문자 구별 없이 비교하려면 equalsIgnoreCase( )를 사용하면 된다.



다음으로 equals( )와 == 를 비교해보자.



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
 
public class StringTest
{
    public static void main(String args[])
    {
        String a1 = "pen";
        String a2 = "apple";
        String a3 = "pen";
        String a4 = new String("pen") ;
    
 
        // ==를 사용해 a1과 다른 문자를 비교해 보자.
        System.out.println("== 사용");
        
        System.out.println(a1 == a2);
        System.out.println(a1 == a3);
        System.out.println(a1 == a4);
        
        // equals()를 사용해 a1과 다른 문자를 비교해 보자.
        System.out.println("\nequals() 사용");
        
        System.out.println(a1.equals(a2));
        System.out.println(a1.equals(a3));
        System.out.println(a1.equals(a4));
    }
}
 
cs


1
2
3
4
5
6
7
8
9
10
11
[실행결과]
 
== 사용
false
true
false
 
equals() 사용
false
true
true
cs



먼저 == 를 사용했을 경우를 보자. a1과 a2는 다른 문자이므로 당연리 false다. a1과 a3는 같은 문자를 가지고 있으므로 true이다. a1과 a4는 둘 다 같은 문자를 가지고 있는데도 false라는 결과가 나온다.


즉 == 로 비교할 경우 같은 문자열을 가지고 있어도 주소값이 다른 경우 false가 나온다는 것을 알 수 있다. 그리고 같은 내용을 가지고 있으면 주소값이 동일하다는 것도 확인할 수 있다. (a1과 a3의 비교)


equals( )를 보자. == 과 결과가 다르다. a1과 a2야 문자열이 다르니 false다. 그런데 a1과 a4는 true 라고 나온다. == 와는 결과가 다르다. 이유는 equals( )의 경우 주소값이 다르더라도 안에 담긴 문자열을 비교하는 것이므로 같은 내용이면 true가 나오는 것이다.


즉 문자열을 정확하게 비교하기 위해서는 == 이 아니라 equals( )를 이용해야 한다. 그래야만 잘못 판단하는 경우를 피할 수 있다.



RSS구독 링크추가 트위터 이메일 구독