logo

Lajittele merkkijono Javassa (2 eri tapaa)

Merkkijonoluokassa ei ole menetelmää, joka lajittelee merkkijonon suoraan, mutta voimme lajitella merkkijonon soveltamalla muita menetelmiä peräkkäin. Merkkijono on merkkijono. Javassa merkkijonon objektit ovat muuttumattomia, mikä tarkoittaa vakiota, eikä niitä voi muuttaa luomisen jälkeen.

Merkkijonon luominen



Javalla on kaksi tapaa luoda merkkijono:

  • Merkkijono kirjaimellinen
String s = techcodeview.com;>
  • Käyttämällä Uusi avainsana
String s = new String (techcodeview.com);>

Huomautus: Kuten tiedämme, String on muuttumaton javassa, joten kolmannessa vaiheessa meidän on luotava uusi merkkijono.

Menetelmät:



On olemassa kaksi tapaa, joilla voimme lajitella minkä tahansa Java-jonon aakkosjärjestykseen

java-indeksi
  1. Käyttämättä sort()-menetelmää
  2. Käyttämällä sort()-menetelmä

Kuva:

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

Keskustellaan nyt menetelmistä ja toteutetaan samat.



Tapa 1: Käyttämättä sort()-menetelmää

Tässä otamme käyttöön lähestymistavan merkkijonon lajitteluun ilman ennalta määritettyä logiikkaa. Joten siitä tulee myös tärkeä lähestymistapa haastattelun näkökulmasta.

powershell suurempi tai yhtä suuri

Toimenpide:

  1. Muunna merkkijono taulukoksi String-luokan menetelmän toCharArray() avulla
  2. Käytä nyt sisäkkäisiä silmukoita taulukon elementtien vaihtojen tarkistamiseen.
  3. Tulosta nämä merkkijonon elementit.

Esimerkki

Java
// 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 */>

Lähtö:

eeeefggkkorss>

Aika monimutkaisuus : O(n * log n). (jossa n on syötemerkkijonon koko.)


Tapa 2: Tekijä käyttämällä sort()-menetelmä

2A Käyttämällä sort()-menetelmä- luonnollinen lajittelu

Toimenpide:

  1. Päälogiikka on toCharArray()-metodi String-luokasta syötemerkkijonon päälle luodaksesi merkkijonon syötemerkkijonolle.
  2. Käytä nyt Arrays.sort(char c[]) tapa lajitella merkkijono.
  3. Luo lajiteltu merkkijono merkkijonosta String-luokan konstruktoria käyttämällä.

Esimerkki 1

merkkijonojen joukko c
Java
// 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);  } }>

Lähtö
Input String : geeksforgeeks Output String : eeeefggkkorss>

2B Tekijä käyttämällä sort()-menetelmä- Mukautettu lajittelu

Arrays.sort(char c[]) menetelmä lajitella merkit niiden ASCII-arvon perusteella, voimme määritellä mukautetun Vertailija lajitella merkkijono.

Kuva:

Input String : techcodeview.com Output String : eeeefGGkkorss>

Toimenpide:

  1. Muunna syöttömerkkijono muotoon Merkki joukko. Ei ole suoraa tapaa tehdä se. Käytämme silmukkaa taulukon täyttämiseen.
  2. Käyttää Arrays.sort(T [ ], Comparator c) tapa lajitella merkkijono. Tätä varten meidän on toteutettava vertailla() mukautetun lajittelukäyttäytymisemme perusteella.
  3. Nyt voimme käyttää StringBuilderiä muuntaaksesi merkkijonon merkkijonoksi.

Esimerkki 2

Java
// 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() { // Menetelmä 2 // Merkkien vertailu @Override public int vertaa(Character c1, Character c2) { // Jätetään huomioimatta kirjainkoot return Character.compare( Character.to LowerCase(c1), Character.to LowerCase(c2));  } });  // Merkkitaulukon muuntaminen StringBuilderin avulla // Merkkijono StringBuilder sb = new StringBuilder(tempArray.length);  for (Character c : tempArray) sb.append(c.charValue());  return sb.toString();  } // Menetelmä 3 // MAin-ohjainmenetelmä public static void main(String[] args) { // Mukautettu syöttömerkkijono String inputString = 'techcodeview.com';  // Menetelmän 1 kutsuminen syötemerkkijonon lajittelemiseksi // ja tallennus merkkijonoon Merkkijono outputString = sortString(inputString);  // Tulosta ja näytä syöttö- ja lähtömerkkijonot System.out.println('Input String : ' + inputString);  System.out.println('Output String : ' + outputString);  } }>

Lähtö
Input String : techcodeview.com Output String : eeeefGGkkorss>

Huomautus:

public int compare(Object o1, Object o2) {}>
  • täytyy palauttaa -ve, jos o1:n on oltava ennen o2:ta
  • täytyy palauttaa +ve, jos o1:n tulee tulla o2:n jälkeen
  • täytyy palauttaa 0, jos o1 on yhtä suuri kuin o2