Java에서 문자열 배열을 알파벳순으로 정렬

Mohammad Irfan 2023년10월12일
  1. Java에서 내장 메소드를 사용하지 않고 문자열 배열 정렬
  2. Java의 stringArraySort() 메서드를 사용하여 문자열 배열 정렬
  3. Java에서 compareTo() 메소드를 사용하여 문자열 배열 정렬
  4. Java의 Arrays.sort() 메서드를 사용하여 문자열 배열 정렬
  5. Java에서 내림차순으로 문자열 배열 정렬
  6. Java에서 대소문자를 무시하여 문자열 배열 정렬
  7. Java에서 문자열 배열을 알파벳순으로 정렬
Java에서 문자열 배열을 알파벳순으로 정렬

이 자습서에서는 Java에서 문자열 배열을 알파벳순으로 정렬하는 방법을 소개합니다. 또한 주제를 이해하는 데 도움이 되는 몇 가지 예제 코드를 나열했습니다.

정렬은 데이터를 특정 순서로 정렬하는 것입니다. 정수를 오름차순 또는 내림차순으로 정렬하거나 영어 문자나 단어를 사전순으로 정렬할 수 있습니다.

사전순은 단어가 영어 단어 사전에 있는 경우 단어가 나타나는 순서입니다. 이 가이드에서는 Java에서 문자열 배열을 정렬하는 방법에 대해 설명합니다.

이 기사의 문자열을 더 작거나 더 큰 단어와 비교할 것입니다. 하나의 문자열은 사전순에 따라 먼저 나타나는 경우 다른 문자열보다 작습니다.

또한 사전 순서에서 모든 대문자가 소문자보다 먼저 옵니다. 이것은 정렬된 배열에서 Z로 시작하는 단어가 a로 시작하는 단어보다 먼저 나타납니다.

Java에서 내장 메소드를 사용하지 않고 문자열 배열 정렬

먼저 Java에서 자체 정렬 방법을 구현하려고 합니다. 두 문자열을 비교하여 어느 것이 더 작거나 더 큰지 알려주는 compareStrings()라는 메서드를 만들 것입니다.

다음으로 compareStrings() 메서드를 사용하여 각 문자열을 배열에 있는 다른 모든 문자열과 비교하고 해당 문자열을 올바른 위치에 배치합니다. 두 가지 방법에 대한 알고리즘은 다음과 같습니다.

  1. 이 메서드의 입력은 두 개의 문자열이며 정수 값을 반환합니다. 이 방법의 출력은 다음과 같습니다.
    • string1 > string2인 경우: 양의 정수 반환
    • string1 < string2인 경우: 음의 정수 반환
    • string1 == string2인 경우: 0 반환
  2. 두 문자열의 각 문자를 동시에 반복하고 유니코드 값을 비교합니다. 내장 charAt() 메서드를 사용하여 유니코드 값을 가져옵니다. 이 값을 사용하면 문자를 일반 정수인 것처럼 비교할 수 있습니다.
  3. 유니코드 값이 두 문자 모두에 대해 동일한 경우 각 문자열의 다음 문자로 이동합니다.
  4. 유니코드 값이 다르면 값의 차이를 반환합니다.
  5. 두 문자열의 문자가 모두 떨어지면 루프가 종료됩니다.
  6. 루프 외부에서 두 문자열의 길이가 다른 경우 이 차이를 반환합니다. 더 작은 문자열의 모든 문자가 더 긴 문자열의 시작 부분에 나타날 수 있기 때문에 이렇게 합니다. 예를 들어 appapplication. 이 경우 더 긴 문자열이 더 작은 문자열 다음에 옵니다.
  7. 문자열의 길이가 같으면 단순히 0을 반환하여 두 문자열이 동일함을 나타냅니다.

Java의 stringArraySort() 메서드를 사용하여 문자열 배열 정렬

이 메서드는 문자열 배열을 입력으로 받아 정렬된 배열을 반환합니다. 여기에서 하나는 다른 하나에 중첩된 두 개의 루프를 갖게 됩니다. 배열의 각 요소를 나머지 모든 요소와 비교하는 데 사용됩니다.

루프 내부의 각 요소 쌍에 대해 compareString() 메서드를 사용하여 비교합니다. 첫 번째 문자열이 다른 문자열보다 크면 위치를 바꿉니다.

전체 코드는 아래에 나와 있습니다.

public class Main {
  public static int compareStrings(String word1, String word2) {
    for (int i = 0; i < Math.min(word1.length(), word2.length()); i++) {
      if ((int) word1.charAt(i) != (int) word2.charAt(i)) // comparing unicode values
        return (int) word1.charAt(i) - (int) word2.charAt(i);
    }
    if (word1.length()
        != word2.length()) // smaller word is occurs at the beginning of the larger word
      return word1.length() - word2.length();
    else
      return 0;
  }
  public static String[] stringArraySort(String[] words) {
    for (int i = 0; i < words.length - 1; i++) {
      for (int j = i + 1; j < words.length; j++) {
        if (compareStrings(words[i], words[j]) > 0) // words[i] is greater than words[j]
        {
          String temp = words[i];
          words[i] = words[j];
          words[j] = temp;
        }
      }
    }
    return words;
  }
  public static void main(String[] args) {
    String[] arrToSort = {"apple", "oranges", "bananas", "Strawberry", "Blueberry"};
    String[] sortedArr = stringArraySort(arrToSort);

    for (int i = 0; i < sortedArr.length; i++) System.out.print(sortedArr[i] + " ");
  }
}

출력:

Blueberry Strawberry apple bananas oranges

Java에서 compareTo() 메소드를 사용하여 문자열 배열 정렬

위의 코드에서 우리는 두 문자열을 비교하고 사전에 있는 경우 어떤 문자열이 먼저 올 것인지를 나타내는 정수 값을 반환하는 메서드를 작성했습니다.

Java는 compareTo()라고 하는 내장 메소드를 제공하여 이 작업을 수행할 수 있습니다. 이 메서드의 구문은 다음과 같습니다.

string1.compareTo(string2)

이 메소드의 출력은 앞서 정의한 compareStrings() 메소드와 유사합니다.

  • string1 > string2인 경우: 양의 정수 반환
  • string1 < string2인 경우: 음의 정수 반환
  • string1 == string2인 경우: 0 반환

다음 코드는 compareTo() 메소드가 Java에서 작동하는 방식을 보여줍니다.

public class Main {
  public static void main(String[] args) {
    System.out.println("apple".compareTo("orange")); // apple < orange
    System.out.println("AAA".compareTo("aaa")); // AAA < aaa
    System.out.println("ZZZ".compareTo("aaa")); // ZZZ < aaa
    System.out.println("zzz".compareTo("aaa")); // zzz > aaa
    System.out.println("strawberry".compareTo("strawberry")); // strawberry == strawberry
  }
}

출력:

-14
-32
-7
25
0

compareTo() 메소드를 사용하여 배열을 정렬할 수 있습니다. 이 프로그램은 위의 이전 프로그램과 매우 유사합니다. 유일한 차이점은 앞에서 정의한 compareStrings() 메서드 대신 compareTo() 메서드를 사용한다는 것입니다.

public class Main {
  public static String[] stringArraySort(String[] words) {
    for (int i = 0; i < words.length - 1; i++) {
      for (int j = i + 1; j < words.length; j++) {
        if (words[i].compareTo(words[j]) > 0) // words[i] is greater than words[j]
        {
          String temp = words[i];
          words[i] = words[j];
          words[j] = temp;
        }
      }
    }
    return words;
  }
  public static void main(String[] args) {
    String[] arrToSort = {"apple", "oranges", "bananas", "Strawberry", "Blueberry"};
    String[] sortedArr = stringArraySort(arrToSort);
    for (int i = 0; i < sortedArr.length; i++) System.out.print(sortedArr[i] + " ");
  }
}

출력:

 Blueberry Strawberry apple bananas oranges

Java의 Arrays.sort() 메서드를 사용하여 문자열 배열 정렬

배열을 정렬하는 더 간단한 방법이 있습니다. 이를 위해 Arrays 클래스의 sort() 메소드를 사용할 수 있습니다. 이 메서드의 구문은 다음과 같습니다.

Arrays.sort(stringArray)

기본적으로 배열은 자연 순서(사전순)로 정렬됩니다. 그러나 다른 비교자를 지정하여 이 순서를 변경할 수 있습니다.

비교기는 두 개체를 비교하고 어느 것이 다른 것보다 작거나 큰지를 알려주는 데 사용되는 방법입니다. sort() 방법은 Quicksort 알고리즘을 사용하며 O(n*log(n))의 시간 복잡도를 갖습니다.

다음 코드는 sort() 메서드의 기본 동작을 보여줍니다.

import java.util.Arrays;
public class Main {
  public static void main(String[] args) {
    String[] arrToSort = {"apple", "oranges", "bananas", "Strawberry", "Blueberry"};
    Arrays.sort(arrToSort);
    for (int i = 0; i < arrToSort.length; i++) {
      System.out.print(arrToSort[i] + " ");
    }
  }
}

출력:

Blueberry Strawberry apple bananas oranges

Java에서 내림차순으로 문자열 배열 정렬

자연 역순 또는 내림차순으로 배열을 정렬하려면 아래와 같이 reverseOrder() 비교기를 사용할 수 있습니다.

import java.util.Arrays;
import java.util.Collections;

public class Main {
  public static void main(String[] args) {
    String[] arrToSort = {"apple", "oranges", "bananas", "Strawberry", "Blueberry"};
    Arrays.sort(arrToSort, Collections.reverseOrder());
    for (int i = 0; i < arrToSort.length; i++) {
      System.out.print(arrToSort[i] + " ");
    }
  }
}

출력:

oranges bananas apple Strawberry Blueberry

Java에서 대소문자를 무시하여 문자열 배열 정렬

문자열 배열을 알파벳 순서로 설정하되 대소문자를 무시하려면 아래 코드 예제를 사용하십시오.

import java.util.Arrays;
public class Main {
  public static void main(String[] args) {
    String[] arrToSort = {"apple", "oranges", "bananas", "Strawberry", "Blueberry"};
    Arrays.sort(arrToSort, String.CASE_INSENSITIVE_ORDER); // case insensitive sort
    for (int i = 0; i < arrToSort.length; i++) {
      System.out.print(arrToSort[i] + " ");
    }
  }
}

출력:

apple bananas Blueberry oranges Strawberry

Java에서 문자열 배열을 알파벳순으로 정렬

정렬은 특정 순서로 요소를 정렬하는 것입니다. 문자열 배열을 알파벳순 또는 사전순으로 정렬할 수 있습니다. Java에는 내장 compareTo() 메소드가 있습니다. 이 메소드는 두 문자열을 비교하고 어느 것이 다른 것보다 더 큰지 구별하는 데 사용할 수 있습니다. 이 방법을 사용하여 정렬 알고리즘을 작성할 수 있습니다.

Java에는 문자열 배열을 정렬할 수 있는 Arrays.sort() 메서드도 있습니다. sort() 메서드에 대해 다른 비교기를 사용하여 다른 방식으로 배열 순서를 설정할 수 있습니다.

관련 문장 - Java String

관련 문장 - Java Array