Desember 24, 2014

Membuat Class Terbilang beserta implementasinya pada Swing Java


Terbilang ...  Tutorial ini mungkin sudah banyak bertaburan di internet dan serta bagaimana mengaplikasikannya, tapi kali ini saya buat lagi untuk menyegarkan ingatan.

Untuk menentukan terbilang suatu nilai, kita membutuhkan sebuah Class yang akan kita gunakan, kali ini dinamakan Class "Terbilang.java". untuk lebih lengkapnya, silahkan lihat Scriptnya :

package javabego.examp.terbilang;

import java.util.HashMap;
import java.util.Map;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import java.util.regex.PatternSyntaxException;

/**
 *
 * @author eryckgusdian
 * CopyRight© 2014  javabego
 * Semua isi dalam file ini adalah milik Eryck Gusdian.
 * Pemilik tidak bertanggung jawab jika Anda menyalah gunakan file ini
 * dan Pemilik TIDAK MENJAMIN apapun atas file ini.
 *
 * Anda dapat menghubungi pemilik hak cipta ini :
 * E-mail : javabego@gmail.com
 * Blog : http://javabego.blogspot.com/
 */

public class Terbilang {
    Map digits = new HashMap();
    Map orders = new HashMap();
    private String NilaiUang = null;
    private String Hasil = null;
    Class Class = null;

    public Terbilang() {
        digits.put("0", "nol");
        digits.put("1", "satu");
        digits.put("2", "dua");
        digits.put("3", "tiga");
        digits.put("4", "empat");
        digits.put("5", "lima");
        digits.put("6", "enam");
        digits.put("7", "tujuh");
        digits.put("8", "delapan");
        digits.put("9", "sembilan");
        orders.put("0", "");
        orders.put("1", "puluh");
        orders.put("2", "ratus");
        orders.put("3", "ribu");
        orders.put("6", "juta");
        orders.put("9", "miliar");
        orders.put("12", "triliun");
        orders.put("15", "kuadriliun");
    }

   public Terbilang(Object Nilai) {
        this();
        this.NilaiUang = convertNumToString(Nilai);
    }
     
   public void aturNilaiTerbilang(Object num) {
        this.NilaiUang = this.convertNumToString(num);
   }
   

    @Override
   public String toString() {
        buatTerbilang();
        return Hasil;
   }
   
   private void buatTerbilang() {
        boolean is_neg = false;
        if (Class.equals(Double.class) || Class.equals(Float.class)) {
            Double chk = Double.parseDouble(NilaiUang);
            is_neg = chk < 0;
        } else {
            is_neg = NilaiUang.startsWith("-") ? true : false;
        }
        String ints = "";
        try {
            Pattern regex = Pattern.compile("^[+-]?(\\d+)");
            Matcher regexMatcher = regex.matcher(NilaiUang);
            if (regexMatcher.find()) {
                ints = regexMatcher.group(1);
            }
        } catch (PatternSyntaxException ex) {
        }
        int mult = 0;
        String wint = "";
        while (!ints.isEmpty()) {
            try {
                Pattern regex = Pattern.compile("(\\d{1,3})$");
                Matcher regexMatcher = regex.matcher(ints);
                while (regexMatcher.find()) {
                    
                    int m = Integer.parseInt(regexMatcher.group());
                    int s = (m % 10);
                    int p = ((m % 100 - s) / 10);
                    int r = ((m - p * 10 - s) / 100);
                    
                    String g = "";
                    if (r == 0) {
                        g = "";
                    } else if (r == 1) {
                        g = "se" + orders.get("2");
                    } else {
                        g = digits.get("" + r + "") + " " + orders.get("2");
                    }

                    if (p == 0) {
                        if (s == 0) {
                        } else if (s == 1) {
                            g = (!g.isEmpty() ? (g + " " + digits.get("" + s + "").toString()) : (mult == 0 ? digits.get("1").toString() : "se"));
                        } else {
                            g = (!g.isEmpty() ? g + " " : "") + digits.get("" + s + "").toString();
                        }
                    } else if (p == 1) {
                        if (s == 0) {
                            g = (!g.isEmpty() ? g + " " : "") + "se" + orders.get("1");
                        } else if (s == 1) {
                            g = (!g.isEmpty() ? g + " " : "") + "sebelas";
                        } else {
                            g = (!g.isEmpty() ? g + " " : "") + digits.get("" + s + "") + " belas";
                        }
                    } else {
                        g = (!g.isEmpty() ? g + " " : "") + digits.get("" + p + "") + " puluh" + (s > 0 ? " " + digits.get("" + s + "") : "");
                    }
                    
                    wint = (!g.isEmpty() ? (g + (g.equals("se") ? "" : " ") + orders.get("" + mult + "")) : "") + (!wint.isEmpty() ? " " + wint : "");
                    
                    String resultString = "";
                    try {
                        Pattern tsRegex = Pattern.compile("\\d{1,3}$");
                        Matcher regexMatchers = tsRegex.matcher(ints);
                        try {
                            resultString = regexMatchers.replaceAll("");
                            ints = resultString;
                        } catch (IllegalArgumentException ex1) {
                        } catch (IndexOutOfBoundsException ex2) {
                        }
                    } catch (PatternSyntaxException ex3) {}
                    mult += 3;
                }
            } catch (PatternSyntaxException ex) {
            }
        }
        if (wint.isEmpty()) {
            wint = digits.get("0").toString();
        }
        
        String frac = "";
        try {
            Pattern regexf = Pattern.compile("\\.(\\d+)");
            Matcher regexMatcherf = regexf.matcher(NilaiUang);
            if (regexMatcherf.find()) {
                frac = regexMatcherf.group();
            }
        } catch (PatternSyntaxException ex) {
        }
        String wfrac = "";
        for (int i = 0; i < frac.length(); i++) {
            String indexf = frac.substring(i, i + 1);
            if (digits.containsKey(indexf)) {
                wfrac += (!wfrac.isEmpty() ? " " : "") + digits.get(indexf);
            }
        }
        Hasil = ((is_neg ? "minus " : "") + wint + ((!wfrac.isEmpty()) ? " koma " + wfrac : ""));
        Hasil = Hasil.replaceAll("\\s{2,}", " ");
        Hasil = Hasil.replaceAll("(null )|(\\s{1,}$)", "");
   }

   private String convertNumToString(Object value) {
        if (null == Class) {
            Class = value.getClass();
        }
        String reval = null;
        if (Character.class.equals(Class) || char.class.equals(Class) || Double.class.equals(Class) || Float.class.equals(Class) || Integer.class.equals(Class) || Long.class.equals(Class) || Short.class.equals(Class)) {
            reval = value.toString();
        } else {
            reval = value.toString();            
        }
        return (reval);
   }

}

Scrip untuk menjalankan Terbilang.java
if (jFormattedTextField1.getText().equalsIgnoreCase("") == false) {
   jTextArea1.setText(new Terbilang(jFormattedTextField1.getText()).toString());
}else{
   jTextArea1.setText("");
}

 Silahkan unduh Source-nya disini
https://drive.google.com/file/d/0B1wwNkjrVkW4MUdKTllpTzJqVkk/view?usp=sharing
 

0 comments:

Posting Komentar

 
Copyright © 2014 by Eryck Gusdian - javabego