Java Problem: sort string

Java Programming
Posted on June 5, 2022 9:54 pm by

Study kasus kali ini adalah bagaimana cara melakukan sorting/ pengurutan kata yang telah diinput, kondisinya adalah inputan tidak boleh berisi angka maupun simbol.

Hasil yang diharapkan sebagai berikut,

Input: dede

Hasil : ddee

Solusi :

  • Ubah hasil input kedalam bentuk array string
    Gunakan fungsi split untuk mengubah string menjadi array string
    example:
    inputString.split(“”);
  • Kemudian manfaatkan fungsi Arrays.sort untuk melakukan sorting
    example:
    Arrays.sort(inputString);
  • Ubah kembali kedalam bentuk string tunggal
    Gunakan StringBuffer atau StringBuilder untuk melakukan penggabungan array string
    Example:
    StringBuffer sb = new StringBuffer();
    for (int i=0;i<inputString.length;i++){
    sb.append(inputString[i]);
    }
  • Done. Tampilkan data yang telah disorting

Struktur project

AlphabetSoup.java
import java.util.ArrayList;
import java.util.Scanner;

public class AlphabetSoup {

    public static void main(String[] args){

        //input console
        Scanner input;
        InputStringImpl inputClass = new InputStringImpl();
        String inputtedStr = null;
        int no = 1;
        ArrayList<DataHold> reportData = new ArrayList<>();
        do{
            input = new Scanner(System.in);
            System.out.println("Type exit to finish your input ");
            System.out.println("[" +no +"]" +" Please input your string ");
            inputtedStr = input.nextLine();
            if(inputtedStr.toString().trim().length() > 0 && !inputtedStr.toString().trim().toLowerCase().equals("exit")){
                if(inputtedStr.matches("^[a-zA-Z]*$")){
                    DataHold dataHold = new DataHold();
                    dataHold.setNumber(no);
                    dataHold.setStrOld(inputtedStr.toString());
                    dataHold.setStrNew(inputClass.inputReverse(inputtedStr));
                    reportData.add(dataHold);
                    no++;
                }else{
                    System.out.println("Please try again, only legal alphabet is allowed ");
                }

            }

        }while(!inputtedStr.toLowerCase().trim().equals("exit"));

        //display result
        System.out.println("***************Report input reverse string*****************");
        for (int x=0;x<reportData.size();x++){
            System.out.format("[ %2d ] the old string before converted: %s ===> after: %s", reportData.get(x).getNumber(), reportData.get(x).getStrOld(), reportData.get(x).getStrNew());
            System.out.println("");
        }
        System.out.println("***************End input reverse string*****************");

    }
}
DataHold.java
import java.util.Objects;

public class DataHold {

    int number;
    String strOld;
    String strNew;

    public int getNumber() {
        return number;
    }

    public void setNumber(int number) {
        this.number = number;
    }

    public String getStrOld() {
        return strOld;
    }

    public void setStrOld(String strOld) {
        this.strOld = strOld;
    }

    public String getStrNew() {
        return strNew;
    }

    public void setStrNew(String strNew) {
        this.strNew = strNew;
    }

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        DataHold dataHold = (DataHold) o;
        return number == dataHold.number && strOld.equals(dataHold.strOld) && strNew.equals(dataHold.strNew);
    }

    @Override
    public int hashCode() {
        return Objects.hash(number, strOld, strNew);
    }

    @Override
    public String toString() {
        return "DataHold{" +
                "number=" + number +
                ", strOld='" + strOld + '\'' +
                ", strNew='" + strNew + '\'' +
                '}';
    }
}
InputString.java
public interface InputString {


    String inputReverse(String str);

}
InputStringImpl.java
import java.util.Arrays;

public class InputStringImpl implements  InputString {


    @Override
    public String inputReverse(String str) {
        String [] arrStr = str.split("");
        //sorting
        Arrays.sort(arrStr);
        StringBuffer sb = new StringBuffer();
        for (int i=0;i<arrStr.length;i++){
            sb.append(arrStr[i]);
        }
       return sb.toString();
    }
}

Result

Type exit to finish your input 
[1] Please input your string 
dede
Type exit to finish your input 
[2] Please input your string 
hello world
Please try again, only legal alphabet is allowed 
Type exit to finish your input 
[2] Please input your string 
helloworld
Type exit to finish your input 
[3] Please input your string 
testing
Type exit to finish your input 
[4] Please input your string 
komputer
Type exit to finish your input 
[5] Please input your string 
exit
***************Report input reverse string*****************
[  1 ] the old string before converted: dede ===> after: ddee
[  2 ] the old string before converted: helloworld ===> after: dehllloorw
[  3 ] the old string before converted: testing ===> after: eginstt
[  4 ] the old string before converted: komputer ===> after: ekmoprtu
***************End input reverse string*****************

Process finished with exit code 0

Comments