logo

Java で文字列を並べ替える (2 つの異なる方法)

string クラスには文字列を直接並べ替えるメソッドはありませんが、他のメソッドを次々に適用することで文字列を並べ替えることができます。文字列は一連の文字です。 Java では、String のオブジェクトは不変、つまり定数であり、一度作成すると変更することはできません。

文字列の作成



Java で文字列を作成するには 2 つの方法があります。

  • 文字列リテラル
String s = techcodeview.com;>
  • 使用する 新しい キーワード
String s = new String (techcodeview.com);>

注記: ご存知のとおり、文字列は 不変 Javaでは、したがって、3番目のステップで新しい文字列を作成する必要があります。

方法:



Javaの文字列をアルファベット順にソートできるメソッドが2つあります。

32 ビット アーキテクチャと 64 ビット アーキテクチャ
  1. sort() メソッドを使用しない場合
  2. を使用することで、 sort() メソッド

図:

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

次に、メソッドについて説明し、同じように実装してみましょう。



方法 1: sort() メソッドを使用しない場合

ここでは、事前定義されたロジックを使用せずに文字列を並べ替えるアプローチを構築します。したがって、面接の知覚的な観点からも重要なアプローチになります。

Linuxホスト

手順:

  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(char 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(char c[]) ASCII 値に基づいて文字を並べ替えるメソッドでは、カスタムを定義できます。 コンパレータ 文字列をソートします。

図:

Input String : techcodeview.com Output String : eeeefGGkkorss>

手順:

  1. 入力文字列を次のように変換します キャラクター 配列。それを直接行う方法はありません。 for ループを使用して配列を埋めます。
  2. 使用 Arrays.sort(T [ ], コンパレータ c) 文字配列をソートするメソッド。このためには、次のことを実装する必要があります。 比較する() カスタムの並べ替え動作に基づいたメソッド。
  3. これで、StringBuilder を使用して Character 配列を String に変換できるようになりました。

例 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 を返さなければなりません