Computer >> 컴퓨터 >  >> 프로그래밍 >> Java

자바(Java)에서 두 문자열을 비교하는 프로그램 만들기 – 단계별 예제 코드

이 글에서는 자바(Java)에서 두 개의 문자열을 비교하는 프로그램을 만드는 방법을 살펴봅니다. 문자열은 문자들이 연속된 나열(sequence of characters)이며, 자바에서는 기본 타입이 아닌 객체(object)로 취급됩니다. 이러한 특성 때문에 두 문자열의 동등 여부나 대소 관계는 단순히 == 연산자로 판단할 수 없으며, 문자를 하나씩 비교하거나 equals()·compareTo() 같은 메서드를 활용해야 합니다.

여기서는 두 문자열을 처음부터 한 글자씩 정수 값으로 변환해 비교하고, 그 차이를 결과로 반환하는 로직을 직접 구현해 보겠습니다.

입력값

첫 번째 문자열 : Java Program
두 번째 문자열 : Java

기대되는 실행 결과

문자열 비교 결과 : 8

알고리즘

1단계 - 시작
2단계 - 필요한 변수를 선언한다.
3단계 - 비교할 문자열 값을 정의한다.
4단계 - 두 문자열의 길이를 계산한 뒤, 더 작은 값을 최소 길이 변수에 저장한다.
5단계 - 최소 길이만큼 반복하면서 두 문자열의 같은 인덱스에 있는 문자를 가져와 정수로 변환하고 서로 비교한다.
6단계 - 다른 문자가 발견되면 두 문자의 정수 값 차이를 계산해 반환한다.
7단계 - 모든 문자가 같다면 두 문자열 길이의 차이를 결과로 반환한다.
8단계 - 결과를 화면에 출력한다.
9단계 - 종료

예제 1 – main 함수 안에 모든 로직 작성

비교 연산 전체를 main 함수 안에서 처리하는 가장 기본적인 형태입니다.

public class CompareStrings {
   public static void main(String args[]) {
      String input_string_1 = new String("Java Program");
      System.out.println("The string is defined as: " + input_string_1);
      String input_string_2 = new String("Java");
      System.out.println("The string is defined as: " + input_string_2);

      int length_1 = input_string_1.length();
      int length_2 = input_string_2.length();
      int minimum_length = Math.min(length_1, length_2);

      // 기본값은 길이 차이로 설정하고,
      // 반복 중 다른 문자가 발견되면 문자 값의 차이로 교체한다.
      int result = length_1 - length_2;

      for (int i = 0; i < minimum_length; i++) {
         int character_1 = (int) input_string_1.charAt(i);
         int character_2 = (int) input_string_2.charAt(i);
         if (character_1 != character_2) {
            result = character_1 - character_2;
            break;
         }
      }
      System.out.println("\nThe result of string comparison is: " + result);
   }
}

출력

The string is defined as: Java Program
The string is defined as: Java

The result of string comparison is: 8

예제 2 – 함수로 분리한 객체 지향 방식

비교 로직을 별도의 메서드로 분리해 재사용성을 높인 객체 지향 프로그래밍(OOP) 스타일입니다.

public class CompareStrings {
   public static int string_compare(String input_string_1, String input_string_2) {
      int length_1 = input_string_1.length();
      int length_2 = input_string_2.length();
      int minimum_length = Math.min(length_1, length_2);

      for (int i = 0; i < minimum_length; i++) {
         int character_1 = (int) input_string_1.charAt(i);
         int character_2 = (int) input_string_2.charAt(i);
         if (character_1 != character_2) {
            return character_1 - character_2;
         }
      }
      return length_1 - length_2;
   }

   public static void main(String args[]) {
      String input_string_1 = new String("Java Program");
      System.out.println("The string is defined as: " + input_string_1);
      String input_string_2 = new String("Java");
      System.out.println("The string is defined as: " + input_string_2);
      System.out.println("\nThe result of string comparison is: "
            + string_compare(input_string_1, input_string_2));
   }
}

출력

The string is defined as: Java Program
The string is defined as: Java

The result of string comparison is: 8

결과 해석

"Java Program"은 12글자, "Java"는 4글자입니다. 두 문자열의 앞부분("Java")은 완전히 같으므로 문자 단위의 차이는 발생하지 않고, 최종적으로 길이 차이인 12 − 4 = 8이 비교 결과로 출력됩니다. 결과가 음수면 첫 번째 문자열이 사전순으로 앞선다는 의미이고, 양수면 뒤처진다는 의미이며, 0이면 두 문자열이 완전히 같다는 뜻입니다.

참고: 실무에서는 compareTo() 활용

실제 프로젝트에서는 위와 같은 로직을 직접 구현하기보다 String 클래스의 compareTo() 메서드를 사용하는 것이 표준적입니다. 이 메서드는 내부적으로 동일한 원리(유니코드 값 비교)로 동작하며 코드가 훨씬 간결해집니다. 예를 들어 "Java Program".compareTo("Java")를 호출하면 마찬가지로 8이 반환됩니다.