September 8, 2020

Number to Myanmar Digit

ကျွန်တော် Blogger ကို ဝင်မကြည့်ဖြစ်ခဲ့တာ အတော်လေးကြာခဲ့ပါပြီ။ တစ်ချို့အသိတွေက ပြောကြပါတယ်။ Menu တွေ မပေါ်တော့ဘူးတို့၊ Image တွေ ပျောက်ကုန်ပြီတို့။ ဘာကြောင့်လဲ ဆိုတာကိုတော့ ရိပ်မိိပါတယ်။ ဒါပေမဲ့ ပြင်ရမှာ အလုပ်ရှုပ်တာနဲ့ ဒီအတိုင်းပဲ ပစ်ထားခဲ့ပါတယ်။ အားမှအေးဆေးပြင်မယ်ပေါ့။ ဒါပေမဲ့ ပြန်ပြီး မကြည့်ဖြစ်ခဲ့ပါဘူး။

ဒါပေမဲ့ အခု ကိုဗစ် 19 ကြောင့် ကျွန်တေော်တို့ သင်တန်းတွေ တကယ်ပိတ်ထားရတဲ့ အခါ ကျွန်တော် အားသွားခဲ့ပါတယ်။ ဒီအချိန်ဘာလုပ်ရင်ကောင်မလဲ တွေးမိတဲ့ အခါ မြန်မာဂျာဗားယူဇာလေးမှာ စာပြန်ရေးမယ် ဖြစ်လာပါတယ်။ အရင်ဆုံး Site Menu လေးကို ပြန်ပြီး အလုပ်လုပ်အောင်ပြင်ပါတယ်။ Post အသစ်လေးတွေ အားရင်အားသလိုရေးပါတယ်။ ပြီးတော့မှာ Comment တွေကို ပြန်ကြည့်ပါတယ်။ တစ်ချို့ Span Comment တွေလဲရှိကြသလို ကြားထဲမှာလဲ စာမေးထားတဲ့ Comment လဲရှိပါတယ်။ ဒီနေရာမှာတော့ Formatting Number Post မှာ မေးထားတဲ့ မေးခွန်းလေးကို ပြန်ပြီး ဖြေသွားမှာ ဖြစ်ပါတယ်။

မေးထားတာကတော့ Number တွေကို မြန်မာကိန်းဂဏန်း အနေနဲ့ ဘယ်လိုဖေါ်ပြမလဲ ဆိုတာပါ။


My First Idea is Unicode

Java Programming Language ဟာ Character တွေနဲ့ String တွေမှာ Unicode ကို အသုံးပြုထားပါတယ်။ Unicode ဆိုတာကတော့ Encoding System တစ်ခုဖြစ်ပြီး၊ Computer System ပေါ်မှာ ဘာသာစကားအားလုံးကို အသုံးပြုနိုင်အောင် စီစဉ်ထားတဲ့ Encoding System တစ်ခုဖြစ်ပါတယ်။ စာလုံးတွေကို Comflit မဖြစ်အောင် Code Point တွေနဲ့သတ်မှတ်ထားပြီး Hexa Decimal Format နဲ့ ဖေါ်ပြလေ့ရှိပါတယ်။ Ascii Code ဆိိုရင် Code Point ဘယ်လောက်ကနေ ဘယ်လောက်၊ မြန်မာစာ ဆိုရင် Code Point ဘယ်လောက်ကနေ ဘယ်လောက်၊ ဂျပန်စာဆိုရင် Code Point ဘယ်လောက်ကနေ ဘယ်လောက် ဆိုပြီး သတ်မှတ်ထားပါတယ်။

ဘာဘာသာစကားနဲ့ပဲ ရေးရေး Number တွေကိုတော့ 0 ကနေ 9 အထိ အစဉ်လိုက်ထားရှိမှာ ဖြစ်ပါတယ်။ အဲ့ဒီတော့ ကျွန်တော်တို့ စမ်းသပ်ရမှာက Number 0 နဲ့ မြန်မာ သုည ဟာ Code Point ဘယ်လောက်ကွာလဲ ဆိုတာပဲဲ ဖြစ်ပါတယ်။ '0' ကနေ '9' အထိ Unicode Character တွေကို Code Point ကွာခြားချက်နဲ့ ပေါင်းလိုက်ရင် သက်ဆိုင်ရာ ဘာသာစကားရဲ့ ကိန်းဂဏန်း Character တွေကို ရလိမ့်မယ်လို့ တွေးမိပါတယ်။

JShell လေးကို ဖွင့်ပြီး စမ်းကြည့်မိပါတယ်။

အရင်ဆုံးစမ်းမိတာကတော့ မြန်မာ သုညနဲ့ Ascii Zero ဟာ Code Point ဘယ်လောက်ကွာလဲ ဆိုတာပါပဲ။ မြန်မာ သုည char ထဲဲကနေ Ascii Zero char ကို နှုတ်ကြည့်တဲ့အခါ 4112 ကို ရတာကို တွေ့ရပါတယ်။ ဆိုလိုတာက Number Zero ကို 4112 ပေါင်းလိုက်ရင် မြန်မာဂဏန်း သုည ရပါမယ်။ အိုကေ ဆက်ပြီး Number One ကို 4112 နဲ့ ပေါင်းကြည့်တဲ့ အခါမှာ မြန်မာဂဏန်း ၁ ကို ရရှိတာကို တွေ့ရပါတယ်။


Writing Convert Method

Number Character တွေကို တစ်လုံးချင်းပြောင်းပေးနိုင်တာတော့ ဟုတ်ပါပြီ။ တကယ်တမ်း Number တွေလာရင် အပြည့်ကိန်း အနေနဲ့ လာလိမ့်မယ်။ သူမေးထားတဲ့ မေးခွန်းထဲမှာတောင် 13 ဆိုရင် ၁၃ လို့ပြရမယ်လို့ ပါတယ်။ ဒါဆိုရင်တော့ Number တွေကို Charactor တစ်လုံးဆီဖြစ်အောင်လုပ်ပြီး၊ ကွာနေတဲ့ ကုဒ်ပွိုင့်ကို ပေါင်းပေးရုံပဲလို့ တွေးမိပါတယ်။ အဲ့ဒီအတွက် Method တစ်ခုကို ရေးကြည့်ပါတယ်။

String convert(int number) {

	// conver to string       	
	String str = String.valueOf(number);

	// get char array from String
	char [] array = str.toCharArray();
	
	StringBuilder sb = new StringBuilder();
	
	// Loop array
	for(char c : array) {
              
		// change to Myanmar digit uinicode code point
		int i = c + 4112;
              
		// cast to uinicode char
		char mmDigit = (char)i;

		// append to StringBuilder
		sb.append(mmDigit);
	}
	
	// return result as string
	return sb.toString();
}

Integer ကနေ char တစ်လုံးချင်းစီကို ထုတ်ယူဖို့ အတွက် String အဖြစ်ပြောင်းပြီးမှ char array အဖြစ် ပြောင်းယူပါတယ်။ ပြီးတော့မှ char တစ်လုံးချင်းစီကို Myanmar Digit အဖြစ်ပြောင်းပြီး StringBuilder အဖြစ်ပြန်ပြောင်းယူပါတယ်။

ရေးထားတဲ့ Method ကို စမ်းကြည့်တဲ့ အခါ အထက်ပါအတိုင်း မှန်မှန်ကန်ကန် အလုပ်လုပ်နေတာကို တွေ့ရပါတယ်။ တစ်ခြားနည်းလဲ ရှိမယ်ဆိုရင် ရှိနိုင်ပါတယ်။ ကျွန်တော် ဆိုရင်တော့ ဒီအတိုင်း ရေးသားသွားမှာ ဖြစ်ပါတယ်။

သိချင်တာရှိရင်လဲ Comment တွေမှာ မေးပေးကြပါခင်ဗျာ။
ကျွန်တော် သိသလောက်တော့ ဖြေကြားသွားမှာ ဖြစ်ပါတယ်။
မင်းလွင်

No comments:

Post a Comment