본문 바로가기
JAVA

Java 문자열(String) 비교 다양한 사용 방법

by 코딩이라구 2022. 12. 13.

자바(Java)에서는 문자열을 사용하기 위하여 String 자료형을 사용합니다. 이번에는 자바에서 String 문자열의 비교 방법에 대한 메서드와 연산자 및 정규식을 활용한 문자열 비교 방법에 대하여 알아보도록 하겠습니다.


※ 자바 String 문자열 선언 방법

 

// 기본 자료형
String str = "apple";

// 참조형		
String str = new String("apple");

 

 

1. 기본 자료형 : 실제 값을 저장

String apple = "apple"

2. 참조형 : 클래스를 사용하여 값이 저장되어 있는 주소를 저장

String banana = new String("banana")


Java 문자열(String) 비교 방법

 

등위 연산자(==)

실제 문자열이 아닌 주소 값을 비교하는 방법으로 문자열 비교에서 가장 많이 사용되는 방법입니다.

 

// 기본 자료형
String str1 = "apple";
String str2 = "apple";

// 참조형		
String str3 = new String("apple");
String str4 = new String("apple");

// 실제 문자열이 아닌 주소를 비교
// 1) 기본 자료형과 기본 자료형 비교
if(str1 == str2)	System.out.println("기본=기본");
else			System.out.println("기본!=기본");

// 2) 기본 자료형과 참조형 비교		
if(str1 == str3)	System.out.println("기본=참조");
else			System.out.println("기본!=참조");

// 3) 참조형과 참조형 비교		
if(str3 == str4)	System.out.println("참조=참조");
else			System.out.println("참조!=참조");

// 결과
기본=기본
기본!=참조
참조!=참조

 

위 결과에서 연산이 다른 이유는 기본 자료형의 경우 변수가 다르더라도 같은 내용(문자열)을 갖고 있다면 같은 주소를 바라보게 됩니다. 하지만 참조형의 경우 각각 메모리의 일정한 공간을 차지하기 때문에 같은 내용이라 하더라도 다른 주소를 가리키게 됩니다.

결국 등위 연산자는 실제 문자열이 아닌 주소를 비교하는 것입니다.


equals(), equalsIgnoreCase() 메서드

대소문자를 구분 또는 무시하여 비교하는 방법으로 실제 문자열을 비교하기 위해서는 String 클래스에서 제공해주는 equals(), equalsIgnoreCase() 메서드를 사용하게 됩니다.

 

// 대소문자 구분
if("apple".equals("apple"))	System.out.println("equals 같다");     // 같다 출력
else				System.out.println("equals 다르다");
		
if("apple".equals("APPLE"))	System.out.println("equals 같다");
else				System.out.println("equals 다르다");   // 다르다 출력
		
// 대소문자 무시
if("apple".equalsIgnoreCase("apple"))	System.out.println("equalsIgnoreCase 같다");    // 같다 출력
else					System.out.println("equalsIgnoreCase 다르다");
	
if("apple".equalsIgnoreCase("APPLE"))	System.out.println("equalsIgnoreCase 같다");    // 같다 출력
else					System.out.println("equalsIgnoreCase 다르다");

// 결과
equals 같다
equals 다르다
equalsIgnoreCase 같다
equalsIgnoreCase 같다

 

결과를 보면 기본 자료형과 참조형을 가리지 않고 실제 문자열에 대한 비교를 하는 것이 보입니다.

equals() 메서드는 대소문자를 구분하여 비교하고, equalsIgnoreCase() 메서드는 대소문자를 무시하고 비교하므로 각각 상황에 맞는 비교 메서드를 효율적으로 사용하시면 됩니다.


compareTo(), compareToIgnoreCase(), matches() 메서드

String 클래스에서 문자열에 대한 비교를 위한 다양한 메서드들을 제공해주고 있습니다.

첫 번째로 두 문자열의 길이와 각각의 순서에 맞는 char를 비교하는 compareTo(), compareToIgnoreCase() 메서드입니다.

비교할 문자열이 같고 길이가 다를 경우 차이나는 길이를 반환하고, 비교할 문자가 다를 경우 문자열의 아스키코드표만큼 차이나는 값을 반환하며 동일한 문자열일 경우 0을 반환합니다.

 

// 문자의 길이와 각각의 순서에 맞는 char를 대소문자를 구분하여 구분
if("apple ".compareTo("apple") == 0)	System.out.println("apple ".compareTo("apple"));
else				   	System.out.println("apple ".compareTo("apple"));
		
if("apple".compareTo("APPLE") == 0)	System.out.println("apple".compareTo("APPLE"));
else					System.out.println("apple".compareTo("APPLE"));
		
// 대소문자 무시
if("apple".compareToIgnoreCase("APPLE") == 0)	System.out.println("compareToIgnoreCase 같다");
else						System.out.println("compareToIgnoreCase 다르다");

// 결과
1(차이나는 길이)
32(차이나는 값)
compareToIgnoreCase 같다

(아스키코드표, a=97/A=65, 97-65=32 반환)

 

 

두 번째로 파라미터로 정규식(regex)을 입력받아 문자열이 정규식과 일치하는지 확인하는 방법으로 사용되지만, 문자열 비교에서도 활용할 수 있는 matches() 메서드가 있습니다.

 

// 문자열과 정규식이 일치하는지를 확인하는 방법으로 사용하지만, 문자열 비교에서도 활용할 수 있다.
if(str1.matches(str3))	System.out.println("matches 같다");
else			System.out.println("matches 다르다");

// 결과
matches 같다

 

이상으로 자바(Java)에서 문자열(String) 비교를 하는 다양한 방법에 대하여 알아보았습니다.

댓글