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

Java에서 두 문자열의 고유한 문자만 추출해 연결하는 방법

Java 프로그래밍에서 두 개의 문자열을 비교하여 한쪽에만 존재하는 고유한(uncommon) 문자들을 추출한 뒤, 이를 하나의 문자열로 연결해야 하는 경우가 있습니다. 아래 예제에서는 HashMap을 활용해 이 문제를 효율적으로 해결하는 방법을 살펴보겠습니다.

예제 코드

import java.util.*;
import java.lang.*;
import java.io.*;
public class Demo{
   public static String concat_str(String str_1, String str_2){
      String result = "";
      int i;
      HashMap<Character, Integer> my_map = new HashMap<Character, Integer>();
      for (i = 0; i < str_2.length(); i++)
      my_map.put(str_2.charAt(i), 1);
      for (i = 0; i < str_1.length(); i++)
      if (!my_map.containsKey(str_1.charAt(i)))
      result += str_1.charAt(i);
      else
      my_map.put(str_1.charAt(i), 2);
      for (i = 0; i < str_2.length(); i++)
      if (my_map.get(str_2.charAt(i)) == 1)
      result += str_2.charAt(i);
      return result;
   }
   public static void main(String[] args){
      String my_str_1 = "ABMCD";
      String my_str_2 = "MNCPQR";
      System.out.println("The uncommon values concatenated from both strings is : ");
      System.out.println(concat_str(my_str_1, my_str_2));
   }
}

출력 결과

The uncommon values concatenated from both strings is :
ABDNPQR

코드 동작 원리

Demo 클래스에는 두 개의 문자열을 매개변수로 받는 concat_str 메서드가 정의되어 있습니다. 이 메서드는 다음과 같은 단계로 동작합니다.

1단계: HashMap 초기화

먼저 Character를 키로, Integer를 값으로 가지는 HashMap 인스턴스(my_map)를 생성합니다. 이후 두 번째 문자열(str_2)을 순회하면서 모든 문자를 키로 저장하고 값을 1로 설정합니다.

2단계: 첫 번째 문자열 처리

첫 번째 문자열(str_1)을 순회하면서 현재 문자가 my_map에 존재하지 않으면 결과 문자열(result)에 추가하고, 이미 존재한다면 해당 문자의 값을 2로 갱신합니다. 값이 2로 변경된 문자는 두 문자열에 모두 등장하는 공통 문자임을 의미합니다.

3단계: 두 번째 문자열 처리

마지막으로 두 번째 문자열(str_2)을 다시 순회하면서 값이 여전히 1인 문자, 즉 첫 번째 문자열에는 등장하지 않은 문자만 결과 문자열에 추가합니다. 이렇게 완성된 문자열이 최종적으로 반환됩니다.

main 메서드의 실행 흐름

main 메서드에서는 ABMCD와 MNCPQR이라는 두 개의 문자열을 정의한 뒤 concat_str 메서드를 호출합니다. 두 문자열에 공통으로 포함된 문자 M과 C는 제외되고, 나머지 문자들이 연결되어 최종적으로 ABDNPQR이 콘솔에 출력됩니다.

참고: 성능 개선 팁

위 코드에서는 문자열 연결에 += 연산자를 사용하는데, 반복 횟수가 많아지면 새로운 String 객체가 계속 생성되어 성능이 저하될 수 있습니다. 실무 환경에서는 StringBuilder를 사용해 문자열을 조립하는 것이 더 효율적입니다. 또한 HashMap 대신 boolean 배열이나 HashSet을 활용하면 코드를 더욱 간결하게 만들 수도 있습니다.