logo

Java에서 문자열 정렬(2가지 방법)

string 클래스에는 문자열을 직접 정렬하는 메서드가 없지만, 다른 메서드를 차례로 적용하여 문자열을 정렬할 수 있습니다. 문자열은 일련의 문자입니다. Java에서 String의 객체는 불변입니다. 이는 상수를 의미하며 일단 생성되면 변경할 수 없습니다.

문자열 만들기

Java에서 문자열을 만드는 방법에는 두 가지가 있습니다.



  • 문자열 리터럴
String s = techcodeview.com;>
  • 사용 새로운 예어
String s = new String (techcodeview.com);>

메모: 우리가 알고 있듯이 String은 불변 Java에서는 세 번째 단계에서 새 문자열을 만들어야 합니다.

행동 양식:

자바에는 문자열을 알파벳순으로 정렬하는 두 가지 방법이 있습니다.

문자열 분할 C++
  1. sort() 메소드를 사용하지 않고
  2. 을 사용하여 sort() 메서드

삽화:

Input string : 'geeksforgeeks' Output string : 'eeeefggkkorss'>

이제 방법을 논의하고 구현해 보겠습니다.

방법 1: sort() 메소드를 사용하지 않고

여기서는 미리 정의된 논리를 사용하지 않고 문자열을 정렬하는 접근 방식을 제시하겠습니다. 따라서 면접 관점에서도 중요한 접근 방식이 됩니다.

유형 변수 자바

절차:

  1. String 클래스의 toCharArray() 메서드를 사용하여 문자열을 배열로 변환합니다.
  2. 이제 중첩 루프를 사용하여 배열 요소 교체를 확인합니다.
  3. 다음 문자 배열 요소를 인쇄합니다.

자바
// Java program for Sorting a String without using any inbuilt sorting functions import java.io.*; class StringSort {  //The Merge Function, handling the core compare & copy logic  void merge(char arr[], int l, int m, int r)  {    int n1 = m - l + 1;  int n2 = r - m;  char L[] = new char[n1];  char R[] = new char[n2]; //Logic for backing up to temp arrays  for (int i = 0; i < n1; ++i)  L[i] = arr[l + i];  for (int j = 0; j < n2; ++j)  R[j] = arr[m + 1 + j];  int i = 0, j = 0;  int k = l;  //Logic to compare and copy. The core Merge Logic of the Merge sort.  while (i < n1 && j < n2) {  if (L[i] <= R[j]) {  arr[k] = L[i];  i++;  }  else {  arr[k] = R[j];  j++;  }  k++;  }  //Logic to copy remaining elements of L[]  while (i < n1) {  arr[k] = L[i];  i++;  k++;  }  //Logic to copy remaining elements of R[]  while (j < n2) {  arr[k] = R[j];  j++;  k++;  }  }  //The main Merge Sort function from where the sorting begins  void mergeSort(char arr[], int l, int r)  {  if (l < r) {  // Find the middle point  int m = l + (r - l) / 2;    // Sort first and second halves  mergeSort(arr, l, m);  mergeSort(arr, m + 1, r);    // Merge the sorted halves  merge(arr, l, m, r);  }  }  // A utility function to print char array of size n  static void printArray(char arr[])  {  int n = arr.length;  for (int i = 0; i < n; ++i)  System.out.print(arr[i] + ' ');  System.out.println();  }  // Driver code  public static void main(String args[])  {  String inputString = 'geeksforgeeks';  char arr[] = inputString.toCharArray();  System.out.println('Given array is');  printArray(arr);  StringSort ob = new StringSort();  ob.mergeSort(arr, 0, arr.length - 1);  System.out.println('
Sorted array is');  printArray(arr);  } } /* This code is contributed by Nikhil B */>

산출:

eeeefggkkorss>

시간 복잡도 : O(n * log n). (여기서 'n'은 입력 문자열의 크기입니다.)


방법 2: 작성자 사용하여 sort() 메서드

2A 을 사용하여 sort() 메소드- 자연적인 정렬

절차:

  1. 주요 논리는 toCharArray() 메서드 입력 문자열에 대해 String 클래스를 사용하여 입력 문자열에 대한 문자 배열을 만듭니다.
  2. 이제 사용하세요 Arrays.sort(문자 c[]) 문자 배열을 정렬하는 방법.
  3. String 클래스 생성자를 사용하여 char 배열에서 정렬된 문자열을 만듭니다.

실시예 1

자바
// Java program to Sort a String Alphabetically // Using toCharArray() method // With using the sort() method // Importing Arrays class from java.util package import java.util.Arrays; // Main class public class GFG {  // Method 1  // To sort a string alphabetically  public static String sortString(String inputString)  {  // Converting input string to character array  char tempArray[] = inputString.toCharArray();  // Sorting temp array using  Arrays.sort(tempArray);  // Returning new sorted string  return new String(tempArray);  }  // Method 2  // Main driver method  public static void main(String[] args)  {  // Custom string as input  String inputString = 'geeksforgeeks';  String outputString = sortString(inputString);  // Print and display commands  // Input string  System.out.println('Input String : ' + inputString);  // Output string  System.out.println('Output String : '  + outputString);  } }>

산출
Input String : geeksforgeeks Output String : eeeefggkkorss>

2B 바이 사용하여 sort() 메소드- 맞춤 정렬

Arrays.sort(문자 c[]) ASCII 값을 기준으로 문자를 정렬하는 방법으로 사용자 정의를 정의할 수 있습니다. 비교기 문자열을 정렬합니다.

int를 문자열 java로 캐스팅

삽화:

Input String : techcodeview.com Output String : eeeefGGkkorss>

절차:

  1. 입력 문자열을 다음으로 변환 성격 정렬. 이를 수행하는 직접적인 방법은 없습니다. for 루프를 사용하여 배열을 채웁니다.
  2. 사용 Arrays.sort(T [ ], 비교기 c) 문자 배열을 정렬하는 방법입니다. 이를 위해서는 다음을 구현해야 합니다. 비교하다() 사용자 정의 정렬 동작을 기반으로 하는 방법입니다.
  3. 이제 StringBuilder를 사용하여 문자 배열을 문자열로 변환할 수 있습니다.

실시예 2

자바
// Java Program to Sort a Mixed String Containing // Uppercase and Lowercase Characters // Importing required classes import java.util.Arrays; import java.util.Comparator; // Main class class GFG {  // Method 1  // To sort a mixed string  public static String sortString(String inputString)  {  // Converting input string to Character array  Character tempArray[]  = new Character[inputString.length()];  for (int i = 0; i < inputString.length(); i++) {  tempArray[i] = inputString.charAt(i);  }  // Sort, ignoring case during sorting  Arrays.sort(tempArray, new Comparator() { // 방법 2 // 문자를 비교하려면 @Override public int Compare(Character c1, Character c2) { // 대소문자 무시 return Character.compare( Character.toLowerCase(c1), Character.toLowerCase(c2));  } });  // StringBuilder를 사용하여 문자 배열을 // String StringBuilder로 변환합니다. sb = new StringBuilder(tempArray.length);  for (문자 c : tempArray) sb.append(c.charValue());  sb.toString()을 반환합니다.  } // 방법 3 // MAin 드라이버 메서드 public static void main(String[] args) { // 사용자 정의 입력 문자열 String inputString = 'techcodeview.com';  // 입력 문자열을 정렬하기 위해 메서드 1을 호출하고 // 문자열에 저장합니다. String outputString = sortString(inputString);  // 입력 및 출력 문자열을 인쇄하고 표시합니다. System.out.println('Input String : ' + inputString);  System.out.println('출력 문자열 : ' + outputString);  } }>

산출
Input String : techcodeview.com Output String : eeeefGGkkorss>

메모:

public int compare(Object o1, Object o2) {}>
  • o1이 o2보다 앞에 와야 한다면 -ve를 반환해야 합니다.
  • o1이 o2 뒤에 와야 한다면 +ve를 반환해야 합니다.
  • o1이 o2와 같으면 0을 반환해야 합니다.