2026년 상식닷컴 선정 식당 & 카페 리스트
최근에 오픈한 호텔을 찾는다면 살펴보세요

자바에서 문자열을 비교하는 방법은?

_____
Q1: 자바에서 문자열을 비교할 때 어떤 방법이 가장 기본인가요?
A1: 자바에서 문자열 비교의 기본 방법은 `equals()` 메서드를 사용하는 것입니다. 이 메서드는 문자열 내용이 같은지를 비교하며, 대소문자까지 정확히 일치해야 `true`를 반환합니다.

Q2: `equals()` 메서드와 `==` 연산자의 차이는 무엇인가요?
A2: `equals()`는 문자열의 실제 내용을 비교하는 반면, `==` 연산자는 객체의 주소(즉, 참조값)를 비교합니다. 따라서 두 문자열이 같아도 다른 객체라면 `==`는 `false`를 반환합니다.

Q3: 문자열을 대소문자 구분 없이 비교하려면 어떻게 하나요?
A3: `equalsIgnoreCase()` 메서드를 사용하면 대소문자를 무시하고 문자열을 비교할 수 있습니다. 예: `str1.equalsIgnoreCase(str2)`

Q4: 문자열을 사전순으로 비교하려면 어떤 메서드를 사용하나요?
A4: `compareTo()` 메서드를 사용합니다. 이 메서드는 두 문자열을 사전순으로 비교하며, 같으면 0, 첫 문자열이 사전적으로 앞서면 음수를, 뒤서면 양수를 반환합니다.

Q5: 두 문자열이 동일한지 null 안전하게 비교하려면 어떻게 해야 하나요?
A5: `Objects.equals(str1, str2)`를 사용하면 둘 중 하나가 null이어도 안전하게 비교가 가능합니다. 혹은 `str1 != null && str1.equals(str2)`와 같이 null 체크 후 `equals()`를 사용해야 합니다.

Q6: 문자열 내용을 포함하는지 여부를 비교하려면?
A6: `contains()` 메서드를 사용합니다. 예: `str1.contains(str2)`는 `str1`이 `str2`를 포함하면 `true`를 반환합니다.

Q7: 특정 위치에서 시작하는지 또는 끝나는지 비교하는 방법은?
A7: `startsWith(prefix)`는 문자열이 특정 접두사로 시작하는지, `endsWith(suffix)`는 특정 접미사로 끝나는지를 각각 확인합니다.

Q8: 정규식을 활용한 문자열 비교는?
A8: `matches()` 메서드를 사용하면 정규식과 일치하는지 확인할 수 있습니다. 예: `str.matches("^[a-zA-Z]+$")`

Q9: 문자열 비교 시 성능을 고려할 점이 있나요?
A9: `equals()` 메서드는 문자열 길이부터 체크해 비교 효율이 높지만, 문자열이 매우 긴 경우나 많은 비교가 필요한 상황에서는 문자열을 사전에 미리 intern()하여 `==` 연산자로 비교하는 방법도 고려할 수 있습니다.

Q10: 문자열 비교 시 유니코드 정규화가 필요한 경우는?
A10: 일부 문자열은 다른 유니코드 조합으로 같은 문자를 표현할 수 있어, `java.text.Normalizer` 클래스를 사용해 정규화 후 비교하는 것이 정확합니다. 예:
```java
import java.text.Normalizer;
String norm1 = Normalizer.normalize(str1, Normalizer.Form.NFC);
String norm2 = Normalizer.normalize(str2, Normalizer.Form.NFC);
norm1.equals(norm2);
```
자바에서 문자열을 비교하는 방법은 여러 가지가 있으며, 각 방법은 특정한 상황에서 유용하게 사용될 수 있습니다.

문자열 비교는 주로 두 개의 문자열이 같은지, 또는 어떤 문자열이 다른 문자열보다 사전적으로 앞서는지 등을 판단할 때 필요합니다.

자바에서는 문자열을 비교하기 위해 주로 `equals()()`, `equalsIgnoreCase()`, `compareTo()`, `compareToIgnoreCase()` 메서드를 사용합니다.

아래에서 각 방법에 대해 자세히 설명하겠습니다.

1. `equals()` 메서드`equals()` 메서드는 두 문자열의 내용을 비교합니다.

이 메서드는 대소문자를 구분하며, 두 문자열이 동일한 경우에만 `true`를 반환합니다.

```javaString str1 = "Hello";String str2 = "Hello";String str3 = "hello";boolean result1 = str1.equals(str

2); // trueboolean result2 = str1.equals(str

3); // false```위의 예제에서 `str1`과 `str2`는 같은 내용을 가지고 있으므로 `true`를 반환합니다.

반면에 `str1`과 `str3`는 대소문자가 다르기 때문에 `false`를 반환합니다.



2. `equalsIgnoreCase()` 메서드`equalsIgnoreCase()` 메서드는 두 문자열을 비교할 때 대소문자를 무시합니다.

즉, 대소문자에 관계없이 문자열의 내용을 비교합니다.

```javaString str1 = "Hello";String str2 = "hello";boolean result = str1.equalsIgnoreCase(str

2); // true```위의 예제에서 `str1`과 `str2`는 대소문자가 다르지만, 내용은 동일하므로 `true`를 반환합니다.



3. `compareTo()` 메서드`compareTo()` 메서드는 두 문자열을 사전적으로 비교합니다.

이 메서드는 문자열이 동일하면 `0`, 첫 번째 문자열이 두 번째 문자열보다 사전적으로 앞서면 음수, 뒤면 양수를 반환합니다.

```javaString str1 = "apple";String str2 = "banana";String str3 = "apple";int result1 = str1.compareTo(str

2); // 음수int result2 = str1.compareTo(str

3); // 0int result3 = str2.compareTo(str1); // 양수```위의 예제에서 `str1`은 `str2`보다 사전적으로 앞서므로 음수를 반환하고, `str1`과 `str3`는 동일하므로 `0`을 반환합니다.

`str2`는 `str1`보다 뒤에 있으므로 양수를 반환합니다.



4. `compareToIgnoreCase()` 메서드`compareToIgnoreCase()` 메서드는 대소문자를 무시하고 문자열을 사전적으로 비교합니다.

이 메서드는 `compareTo()`와 유사하지만, 대소문자에 관계없이 비교합니다.

```javaString str1 = "apple";String str2 = "Banana";String str3 = "APPLE";int result1 = str1.compareToIgnoreCase(str

2); // 음수int result2 = str1.compareToIgnoreCase(str

3); // 0```위의 예제에서 `str1`은 `str2`보다 사전적으로 앞서므로 음수를 반환하고, `str1`과 `str3`는 대소문자를 무시하면 동일하므로 `0`을 반환합니다.



5. `== 연산자`자바에서 `==` 연산자는 두 객체의 참조를 비교합니다.

즉, 두 문자열이 동일한 객체를 참조하는지를 확인합니다.

따라서 문자열의 내용을 비교할 때는 `==` 연산자를 사용해서는 안 됩니다.

```javaString str1 = new String("Hello");String str2 = new String("Hello");boolean result = (str1 == str

2); // false```위의 예제에서 `str1`과 `str2`는 내용은 같지만 서로 다른 객체를 참조하므로 `false`를 반환합니다.

결론자바에서 문자열을 비교할 때는 `equals()`와 `equalsIgnoreCase()`를 사용하여 내용을 비교하고, `compareTo()`와 `compareToIgnoreCase()`를 사용하여 사전적 순서를 비교하는 것이 일반적입니다.

`==` 연산자는 객체의 참조를 비교하기 때문에 문자열의 내용을 비교할 때는 사용하지 않는 것이 좋습니다.

이러한 메서드들을 적절히 활용하면 문자열 비교를 효과적으로 수행할 수 있습니다.

작성자: 김주영 [비회원] | 작성일자: 1년 전 2024-09-05 03:56:58
조회수: 319 | 댓글: 0 | 좋아요: 0 | 싫어요: 0
내용이 부정확하다면 싫어요를 클릭해주세요.