Last active
March 31, 2020 12:34
-
-
Save vonqo/44cff28c1db9d3a49697b9d19eb65671 to your computer and use it in GitHub Desktop.
Number to text mongolia
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/** | |
* Тоог уншигдах байдлаар нь бичих | |
* Жишээ нь: 1996 = мянга есөн зуун ерөн зургаа | |
* | |
* @param str Тоо бүхий текст | |
* @return уншигдахгүйц тест | |
*/ | |
public static String numberToText(String word){ | |
char[] chars = word.toCharArray(); | |
int divider = chars.length / 3; | |
int remainder = chars.length % 3; | |
StringBuilder builder = new StringBuilder(); | |
if(remainder != 0){ | |
boolean tmp = (remainder == 1); | |
builder.append(sayNumber(chars[0], remainder,tmp)); | |
if(!tmp) builder.append(sayNumber(chars[1], 1, false)); | |
builder.append(getLevel(divider*3,tmp)); | |
} | |
for(int i = 1; i <= divider; i++){ | |
boolean tmp = false; | |
int indexer = remainder+i*3; | |
if(chars[indexer-2] == '0' && chars[indexer-1] == '0' && divider == i){ | |
tmp = true; | |
} | |
builder.append(sayNumber(chars[indexer-3], 1, tmp)); | |
if(chars[indexer-3] != '0') | |
builder.append(getLevel(2,tmp)); | |
tmp = (i == divider); | |
builder.append(sayNumber(chars[indexer-2], 2, tmp && chars[indexer-1] == '0')); | |
builder.append(sayNumber(chars[indexer-1], 1, tmp)); | |
builder.append(getLevel(chars.length-indexer,false)); | |
} | |
return builder.toString(); | |
} | |
/** | |
* numberToText методын тайлбарын уншина уу | |
* монгол хэлэнд тоог орноор нь гурав гураваар нь тасалж хэлдэгийн аравтын орон | |
* | |
* @param number тоо | |
* @param len тоон дараалал дунд ямар байршилд байгаа эсэх | |
* @param isEnd ард нь тэгээс өөр тоо байгаа эсэх | |
* @return уншигдахгүйц тест | |
*/ | |
private static String sayNumber(char number, int len, boolean isEnd){ | |
String numberTxt = null; | |
switch(number){ | |
case '0': | |
numberTxt = ""; | |
break; | |
case '1': | |
if(len == 1) numberTxt = "нэг "; | |
if(len == 2) | |
if(isEnd) numberTxt = "арав "; | |
else numberTxt = "арван "; | |
break; | |
case '2': | |
if(len == 1) numberTxt = "хоёр "; | |
if(len == 2) | |
if(isEnd) numberTxt = "хорь "; | |
else numberTxt = "хорин "; | |
break; | |
case '3': | |
if(len == 1) | |
if(isEnd) numberTxt = "гурав "; | |
else numberTxt = "гураван "; | |
if(len == 2) | |
if(isEnd) numberTxt = "гуч "; | |
else numberTxt = "гучин "; | |
break; | |
case '4': | |
if(len == 1) | |
if(isEnd) numberTxt = "дөрөв "; | |
else numberTxt = "дөрөвөн "; | |
if(len == 2) | |
if(isEnd) numberTxt = "дөч "; | |
else numberTxt = "дөчин "; | |
break; | |
case '5': | |
if(len == 1) | |
if(isEnd) numberTxt = "тав "; | |
else numberTxt = "таван "; | |
if(len == 2) | |
if(isEnd) numberTxt = "тавь "; | |
else numberTxt = "тавин "; | |
break; | |
case '6': | |
if(len == 1) | |
if(isEnd) numberTxt = "зургаа "; | |
else numberTxt = "зургаан "; | |
if(len == 2) | |
if(isEnd) numberTxt = "жар "; | |
else numberTxt = "жаран "; | |
break; | |
case '7': | |
if(len == 1) | |
if(isEnd) numberTxt = "долоо "; | |
else numberTxt = "долоон "; | |
if(len == 2) | |
if(isEnd) numberTxt = "дал "; | |
else numberTxt = "далан "; | |
break; | |
case '8': | |
if(len == 1) | |
if(isEnd) numberTxt = "найм "; | |
else numberTxt = "найман "; | |
if(len == 2) | |
if(isEnd) numberTxt = "ная "; | |
else numberTxt = "наяан "; | |
break; | |
case '9': | |
if(len == 1) | |
if(isEnd) numberTxt = "ес"; | |
else numberTxt = "есөн "; | |
if(len == 2) | |
if(isEnd) numberTxt = "ер "; | |
else numberTxt = "ерөн "; | |
break; | |
} | |
return numberTxt; | |
} | |
/** | |
* numberToText методын тайлбарын уншина уу | |
* монгол хэлэнд тоог орноор нь гурав гураваар нь тасалж хэлдэгийн зуутын орон | |
* | |
* @param len тоон дараалал дунд ямар байршилд байгаа эсэх | |
* @param isEnd ард нь тэгээс өөр тоо байгаа эсэх | |
* @return уншигдахгүйц тест | |
*/ | |
private static String getLevel(int len, boolean isEnd){ | |
if(len == 1) return ""; | |
if(len == 2) | |
if(isEnd) return "зуу "; | |
else return "зуун "; | |
if(len == 3) return "мянга "; | |
if(len == 6) return "сая "; | |
if(len == 9) return "тэрбум "; | |
if(len == 12) return "их наяд "; | |
return ""; | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment