ඉලක්කම් සිංහල වාක්‍යවලට හරවා ගැනීම

Author: Shazin Sadakath


විශාල ඉලක්කම් සිංහලට හරවාගැනීමට නොහැකි වීම පිළිබඳව සමාජ ජාලා වෙබ් අඩවි ඔස්සේ පසුගිය දිනවල බොහෝ සෙයින් කතා වුණා. මේ සඳහා මා විසින් පහත Java වැඩසටහන ලියන ලදී. මෙම වැඩසටහන යොදා ගනිමින් ලේසියෙන් ඉලක්කම් සිංහල වාක්‍යවලට හරවා ගත හැක.

import java.util.Scanner;

public class NumWord {

    private final String ERROR = "වැරදි";

    private final String HYPHEN = "-";

    private final String SPACE = " ";

    private String[] singles = { "බිංදුව", "එක", "දෙක", "තුන", "හතර", "පහ", "හය", "හත", "අට", "නවය" };

    private String[] singles_short = { "බිංදුව", "එක්", "දෙ", "තුන්", "හාර", "පන්", "හය", "හත්", "අට", "නව" };

    private String[] tens = { ERROR, ERROR, "විස්ස", "තිහ", "හතළිය", "පනහ", "හැට", "හැත්තෑව", "අසුව", "අනුව" };

    private String[] tens_short = { ERROR, ERROR, "විසි", "තිස්", "හතලිස්", "පනස්", "හැට", "හැත්ත", "අසූ", "අනු"};

    private String[] teens = { "දහය", "එකොළහ", "දොළහ", "දහතුන", "දාහතර", "පහළොව", "දාසය", "දාහත", "දහඅට", "දහනවය" };

    private String[] teens_short = { "දහ", "එකලොස්", "දොළොස්", "දහතුන්", "දාහතර", "පහළොස්", "දහසය", "දාහත්", "දහඅට", "දහනව" };

    private String[] powers = { ERROR, "දහස්", "මිලියන", "බිලියන", "ට්\u200Dරිලියන", "කොඩ්-ට්\u200Dරිලියන" };

    private String hundred = "සීය";

    private String hundred_short = "සිය";

    private boolean hyphenFlag = false;

    private int number;

    public NumWord() {
    }

    public NumWord(int number) {
        this.number = number;
    }

    public String words() {
        return words(number, 0);
    }

    public String words(int number, int level) {
        StringBuilder sb = new StringBuilder();
        if (number == 0) {
            sb.append(level > 0 ? singles_short[number] : singles[number]);
            return sb.toString();
        }

        NumWord numWord = new NumWord();

        // දහස්
        if (number >= 1000) {
            for (int i=5;i>0;--i) {
                int power = (int) Math.pow(1000, i);
                int n = (number - (number % power)) / power;
                if (n > 0) {
                    sb.append(getSeparator(sb));
                    sb.append(numWord.words(n, level + 1));
                    sb.append(getSeparator(sb));
                    sb.append(powers[i]);
                    number -= n * power;
                }
            }

        }

        // සිය
        if (number >= 100 && number < 1000) {
            int n = (number - (number 0)) / 100;
            sb.append(getSeparator(sb));
            sb.append(numWord.words(n, level + 1));
            sb.append(getSeparator(sb));
            sb.append(level > 0 ? hundred_short : hundred);
            number -= n * 100;
        }

        // දහ
        if (number < 100 && number >= 20) {
            int n = (number - (number )) / 10;
            sb.append(getSeparator(sb));
            sb.append(level > 0 || number  > 0 ? tens_short[n] : tens[n]);
            hyphenFlag = true;
            number -= n * 10;
        }

        // එකොළහ - දහනවය
        if (number >= 10 && number < 20) {
            int n = number - 10;
            sb.append(getSeparator(sb));
            sb.append(level > 0 ? teens_short[n] : teens[n]);
            number = 0;
        }

        // දහ
        if (number < 10 && number > 0) {
            sb.append(getSeparator(sb));
            sb.append(level > 0 ? singles_short[number] : singles[number]);
        }

        return sb.toString();
    }

    private String getSeparator(StringBuilder sb) {
        String separator = "";
        if (sb.length() > 0) {
            separator = hyphenFlag ? HYPHEN : SPACE;
            hyphenFlag = false;
        }
        return separator;
    }

    public static void main(String... args) {
        Scanner sn = new Scanner(System.in);
        NumWord numWord = new NumWord();
        Integer no = -1;
        do {
            System.out.print("ඉලක්කමක් ඇතුලත් කරන්න (නතර කිරීම සඳහා -1 ඇතුලත් කරන්න) : ");
            no = sn.nextInt();
            System.out.println(numWord.words(no, 0));
        } while (no > -1);
        System.out.println("ස්තුතියි!");
    }
}

ඉහත වැඩසටහන compile කළ පසු පහත ආකාරයෙන් බාවිත කළ හැක.

ඉලක්කමක් ඇතුලත් කරන්න (නතර කිරීම සඳහා -1 ඇතුලත් කරන්න) : 124
එක් සීය විසි-හතර
ඉලක්කමක් ඇතුලත් කරන්න (නතර කිරීම සඳහා -1 ඇතුලත් කරන්න) : 1024
එක් දහස් විසි-හතර
ඉලක්කමක් ඇතුලත් කරන්න (නතර කිරීම සඳහා -1 ඇතුලත් කරන්න) :  10058
දහ දහස් පනස්-අට
ඉලක්කමක් ඇතුලත් කරන්න (නතර කිරීම සඳහා -1 ඇතුලත් කරන්න) :  1234567890
එක් බිලියන දෙ සිය තිස්-හාර මිලියන පන් සිය හැට-හත් දහස් අට සීය අනුව
ඉලක්කමක් ඇතුලත් කරන්න (නතර කිරීම සඳහා -1 ඇතුලත් කරන්න) : -1

ස්තුතියි!

අදහස්, යෝජනා වලට විවුර්ථයි

 

 

 

 

 



Tags: Number Sinhala Conversion Java
Views: 452
Register for more exciting articles

Comments

Please login or register to post a comment.


There are currently no comments.