HOWTO · Java

자바의 아나그램

이 자습서에서는 두 문자열이 Java에서 아나그램인지 확인하는 방법에 대해 설명합니다.

이 페이지의 내용

단어를 가지고 노는 것을 좋아한다면 아나그램이라는 용어를 이미 알고 있을 것입니다. 두 문자열이 동일한 문자를 포함하지만 다른 단어로 포함되어 있으면 서로를 아나그램이라고 합니다.

예를 들어 RaceCare라는 두 단어가 있는 경우 해당 단어를 보면 동일한 문자를 포함하지만 순서가 다른 것을 볼 수 있습니다.

따라서 RaceCare라는 단어를 서로 애너그램이라고 부를 수 있습니다.

이 기사에서는 두 단어가 아나그램인지 아닌지를 어떻게 알 수 있는지 알아볼 것입니다. 주제를 쉽게 이해할 수 있도록 예제와 설명으로 주제를 다룰 것입니다.

자바에서 아나그램 찾기

아래 예에서 주어진 두 문장이 철자인지 여부를 확인하는 방법을 설명했습니다. 예제 코드는 다음과 같습니다.

// importing necessary packages
import java.util.Arrays;

public class JavaAnagram {
  static void MatchAnagram(String str1, String str2) {
    String Str_1 = str1.replaceAll("\\s", ""); // Removing the spaces from the first string
    String Str_2 = str2.replaceAll("\\s", ""); // Removing the spaces from the second string
    boolean Status = true;
    if (Str_1.length() != Str_2.length()) { // Checking the length of two string
      Status = false;
    } else {
      // Converting all the characters to lower case and putting the chars of the string into a
      // character
      char[] StringArray1 = Str_1.toLowerCase().toCharArray();
      char[] StringArray2 = Str_2.toLowerCase().toCharArray();
      // Shorting the array.
      Arrays.sort(StringArray1);
      Arrays.sort(StringArray2);
      // Matching both array.
      Status = Arrays.equals(StringArray1, StringArray2);
    }
    if (Status) {
      System.out.println(Str_1 + " and " + Str_2 + " = Anagrams");
    } else {
      System.out.println(Str_1 + " and " + Str_2 + " = Anagrams");
    }
  }

  public static void main(String[] args) {
    MatchAnagram("Keep", "Peek");
    MatchAnagram("Race", "Care");
  }
}

우리는 이미 각 라인의 목적을 명령했습니다. 우리가 프로그램에서 따르는 주요 단계는 다음과 같습니다.

  • 먼저 문장에서 모든 공백을 제거했습니다.
  • 그런 다음 두 문장의 길이가 같은지 확인했습니다.
  • 길이가 같으면 먼저 모든 문자를 소문자로 변환했습니다.
  • 이제 우리는 이 두 문장의 모든 문자를 두 개의 서로 다른 배열로 가져와 배열을 정렬했습니다.
  • 마지막으로 두 배열에 동일한 요소가 포함되어 있는지 확인했습니다.
  • 일치하는 경우 두 문장 모두 아나그램입니다.

예제를 실행하면 콘솔에 아래와 같은 출력이 표시됩니다.

Keep and Peek = anagrams
Race and Care = anagrams

XOR을 사용하여 Java에서 아나그램 찾기

아래 예제에서는 비트XOR를 사용하여 Java에서 애너그램을 찾는 방법을 설명합니다. 코드는 다음과 같습니다.

public class JavaAnagram {
  public static void main(String[] args) {
    // Declaring two string
    String STR_1 = "Race";
    String STR_2 = "Care";

    if (AnagramChecking(STR_1, STR_2))
      System.out.println(STR_1 + " & " + STR_2 + " = Anagrams");
    else
      System.out.println(STR_1 + " & " + STR_2 + " = Not Anagrams");
  }

  public static boolean AnagramChecking(String STR_1, String STR_2) {
    // Remove all white spaces, convert to lower case & character array
    char[] StringArr1 = STR_1.replaceAll("\\s", "").toLowerCase().toCharArray();
    char[] StringArr2 = STR_2.replaceAll("\\s", "").toLowerCase().toCharArray();
    if (StringArr1.length != StringArr2.length) // Matching the length
      return false;

    int DoXOR = 0;

    for (int i = 0; i < StringArr1.length; i++) // Performing XOR operation
    {
      DoXOR ^= StringArr1[i] ^ StringArr2[i];
    }

    return DoXOR == 0 ? true : false;
  }
}

우리는 각 라인의 목적을 표시했습니다. 이제 예제 코드를 실행하면 콘솔에 아래와 같은 출력이 표시됩니다.

Race & Care = Anagrams

HashMap을 사용하여 Java에서 아나그램 찾기

아래 예제에서는 HashMap을 사용하여 Java에서 애너그램을 찾는 방법을 설명합니다. 코드는 다음과 같습니다.

// importing necessary packages
import java.util.HashMap;

public class JavaAnagram {
  public static void main(String[] args) {
    // Declaring two string
    String STR_1 = "Race";
    String STR_2 = "Care";
    if (AnagramCheck(STR_1.toLowerCase(), STR_2.toLowerCase()))
      System.out.println(STR_1 + " & " + STR_2 + " = Anagrams");
    else
      System.out.println(STR_1 + " & " + STR_2 + " = Not Anagrams");
  }

  public static boolean AnagramCheck(String STR_1, String STR_2) {
    if (STR_1.length() != STR_2.length()) // Matching the length
      return false;
    HashMap<Character, Integer> MyMap = new HashMap<Character, Integer>(); // Declaring a hashmap
    for (int i = 0; i < STR_1.length(); i++) {
      char ch = STR_1.charAt(i);
      if (MyMap.containsKey(ch))
        MyMap.put(ch, MyMap.get(ch) + 1);
      else
        MyMap.put(ch, 1);
    }
    for (int i = 0; i < STR_2.length(); i++) {
      char ch = STR_2.charAt(i);
      if (MyMap.containsKey(ch)) {
        if (MyMap.get(ch) == 1)
          MyMap.remove(ch);
        else
          MyMap.put(ch, MyMap.get(ch) - 1);
      } else
        return false;
    }
    if (MyMap.size() > 0)
      return false;
    return true;
  }
}

이제 예제 코드를 실행하면 콘솔에 아래와 같은 출력이 표시됩니다.

Race & Care = Anagrams

여기에서 공유되는 코드 예제는 Java로 되어 있으며 시스템에 Java가 포함되어 있지 않은 경우 환경에 Java를 설치해야 합니다.