Проверка анаграммы в Java — код, вывод и объяснение

Две строки являются анаграммами, если они содержат одни и те же символы, но в разном порядке.

Пример 1: проверка двух строк на анаграммы

import java.util.Arrays;

class Main {
  public static void main(String[] args) {
    String str1 = "Race";
    String str2 = "Care";

    str1 = str1.toLowerCase();
    str2 = str2.toLowerCase();

    // check if length is same
    if(str1.length() == str2.length()) {

      // convert strings to char array
      char[] charArray1 = str1.toCharArray();
      char[] charArray2 = str2.toCharArray();

      // sort the char array
      Arrays.sort(charArray1);
      Arrays.sort(charArray2);

      // if sorted char arrays are same
      // then the string is anagram
      boolean result = Arrays.equals(charArray1, charArray2);

      if(result) {
        System.out.println(str1 + " and " + str2 + " are anagram.");
      }
      else {
        System.out.println(str1 + " and " + str2 + " are not anagram.");
      }
    }
    else {
      System.out.println(str1 + " and " + str2 + " are not anagram.");
    }
  }
}

Вывод:

race and care are anagram.

У нас две строки str1 и str2. Мы проверяем, являются ли str1 и str2 анаграммами.

Сначала мы приводим строки к нижнему регистру. Это нужно потому, что Java чувствительна к регистру: R и r для неё — разные символы.

Здесь:

  • str1.toCharArray() — преобразует строку в массив char;

  • Arrays.sort() — сортирует оба массива символов;

  • Arrays.equals() — проверяет, равны ли отсортированные массивы.

Если отсортированные массивы равны, значит строки — анаграммы.

Примечание

Метод Arrays.sort() сравнивает два символа по ASCII-значению, а R и r не равны. Поэтому строки нужно приводить к одному регистру.


Пример 2: ввод строк от пользователя и проверка на анаграммы

import java.util.Arrays;
import java.util.Scanner;

class Main {
  public static void main(String[] args) {

    // create an object of Scanner class
    Scanner input = new Scanner(System.in);

    // take input from users
    System.out.print("Enter first String: ");
    String str1 = input.nextLine();
    System.out.print("Enter second String: ");
    String str2 = input.nextLine();

    // check if length is same
    if(str1.length() == str2.length()) {

      // convert strings to char array
      char[] charArray1 = str1.toCharArray();
      char[] charArray2 = str2.toCharArray();

      // sort the char array
      Arrays.sort(charArray1);
      Arrays.sort(charArray2);

      // if sorted char arrays are same
      // then the string is anagram
      boolean result = Arrays.equals(charArray1, charArray2);

      if(result) {
        System.out.println(str1 + " and " + str2 + " are anagram.");
      }
      else {
        System.out.println(str1 + " and " + str2 + " are not anagram.");
      }
    }
    else {
      System.out.println(str1 + " and " + str2 + " are not anagram.");
    }

    input.close();
  }
}

Вывод:

Enter first String: Race
Enter second String: Care
Race and Care are anagram.

В примере выше мы используем Scanner для получения ввода от пользователя. Затем проверяем, являются ли введённые строки анаграммами.